我有一个应用程序,它用来自android的一个NetworkImageView小部件显示片段。
在NetworkImageView中加载的图像是每5秒改变一次,所以我想通过按下在操作栏中创建的“重新加载”按钮来提升这个图像。
我发现了两个问题:
所以不会发生任何事情(这不是该链接的实际IMG ),我认为这是因为它现在是从缓存加载IMG而不是从internet加载IMG。
来自MainActivity:
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.action_reload) {
ViewFragment fragment = new ViewFragment();
fragment.reload();
}
return super.onOptionsItemSelected(item);
}应用程序获得NullPointerException错误后,单击动作栏重新加载按钮。
方法是我希望重新加载NetworkImageView的地方。
有人能解释一下如何纠正这个问题吗?
发布于 2015-02-28 19:28:13
首先从cache获得request queue。
然后,通过从缓存中调用URL函数(键是您的url)从cache中删除remove。
然后使用你的第一种方法:
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);发布于 2016-05-09 07:26:33
这个问题和答案看起来很陈旧,但这些答案对我的项目不起作用。
为了你的帮助,我在这里写了我的解决方案。
问题是Volley的NetworkImageView将图像缓存为一个映射,并且没有用于init缓存映射的API。
因此,我的解决方案是创建自定义缓存类,其中包括removeCacheAll()。
public class ImageCacheTrunk implements ImageLoader.ImageCache {
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
public void removeCacheAll() {
mCache.evictAll();
}
}并在需要重新加载之前调用removeCacheAll方法。
https://stackoverflow.com/questions/28785548
复制相似问题