【发布时间】:2017-06-03 16:01:52
【问题描述】:
我有两种观点,一种是主要的,另一种是细节的。我从服务器获取所有 url 并在 gridview 上相应地显示位图。一旦用户单击网格项目,我想使用主视图中的缓存图像。但是,我的以下实现不起作用。
我的测试方式如下:首先,我在gridview上显示所有图像并断开互联网,并希望在细节上查看缓存的图像。但是,在详细活动中,图像未显示。
我正在使用以下 Volley Singleton 类,如下所示:
public class CustomVolleyRequest {
private static CustomVolleyRequest customVolleyRequest;
private static Context context;
private RequestQueue requestQueue;
private ImageLoader imageLoader;
private CustomVolleyRequest(Context context) {
CustomVolleyRequest.context = context;
this.requestQueue = getRequestQueue();
imageLoader = new ImageLoader(requestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized CustomVolleyRequest getInstance(Context context) {
if (customVolleyRequest == null) {
customVolleyRequest = new CustomVolleyRequest(context);
}
return customVolleyRequest;
}
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(context.getApplicationContext(), 10 * 1024 * 1024);
}
return requestQueue;
}
ImageLoader getImageLoader() {
return imageLoader;
}
}
主活动适配器
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
final ViewHolder holder;
if(convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.grid_item, parent, false);
}
holder.imageView.setImageUrl(imageRecord.getUrl(), mImageLoader);
}
详细活动
String url = getArguments().getString("image_url");
ImageLoader imageLoader = CustomVolleyRequest.getInstance(getContext()).getImageLoader();
mImageView.setImageUrl(url, imageLoader);
【问题讨论】:
标签: android caching gridview android-volley