如何重新加载 NetworkImageView
How to reload NetworkImageView
我有一个应用程序正在显示带有来自 android Volley 的一个 NetworkImageView 小部件的片段。
NetworkImageView 中加载的 URL 图像每 5 秒更改一次,因此我想通过按下我在操作栏中创建的重新加载按钮来更新此图像。
我发现了 2 个问题:
如果我再次调用此代码加载图像(在 onActivityCreated() 方法创建片段时已经调用):
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
所以什么都不会发生(它不是 link 的实际 IMG),我认为这是因为它现在从缓存而不是从互联网加载 IMG。
如果我调用 fragment reload() 方法:
public void reload(){
MainActivity activity = (MainActivity) getActivity();
IMAGE_URL = activity.getMyData();
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
来自 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 的地方。
谁能解释一下如何解决这个问题?
首先从request queue
得到cache
。
然后通过从缓存中调用 remove
函数从 cache
中删除您的 URL
(关键是您的 url)。
然后使用您的第一种方法:
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
这个问题和答案看起来很旧,但这些答案对我的项目不起作用。
为了您的帮助,我在这里写下我的解决方案。
问题是 Volley NetworkImageView
将图像缓存为地图,但没有 API 用于初始化缓存地图。
因此我的解决方案是制作自定义缓存 class,其中包括 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 方法。
我有一个应用程序正在显示带有来自 android Volley 的一个 NetworkImageView 小部件的片段。
NetworkImageView 中加载的 URL 图像每 5 秒更改一次,因此我想通过按下我在操作栏中创建的重新加载按钮来更新此图像。
我发现了 2 个问题:
如果我再次调用此代码加载图像(在 onActivityCreated() 方法创建片段时已经调用):
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView); mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader(); mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
所以什么都不会发生(它不是 link 的实际 IMG),我认为这是因为它现在从缓存而不是从互联网加载 IMG。
如果我调用 fragment reload() 方法:
public void reload(){ MainActivity activity = (MainActivity) getActivity(); IMAGE_URL = activity.getMyData(); mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView); mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader(); mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
来自 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 的地方。
谁能解释一下如何解决这个问题?
首先从request queue
得到cache
。
然后通过从缓存中调用 remove
函数从 cache
中删除您的 URL
(关键是您的 url)。
然后使用您的第一种方法:
mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
这个问题和答案看起来很旧,但这些答案对我的项目不起作用。
为了您的帮助,我在这里写下我的解决方案。
问题是 Volley NetworkImageView
将图像缓存为地图,但没有 API 用于初始化缓存地图。
因此我的解决方案是制作自定义缓存 class,其中包括 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 方法。