0

我有一个应用程序显示带有来自 android Volley 的 NetworkImageView 小部件的片段。

在 NetworkImageView 中加载的 URL 上的图像每 5 秒更改一次,因此我想通过按我在操作栏中创建的重新加载按钮来更新此图像。

我发现了2个问题:

  1. 如果我再次调用此代码以加载图像(在 onActivityCreated() 方法创建片段时已调用它):

    mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
    mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
    mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
    

所以什么都不会发生(它不是该链接的实际 IMG),我认为这是因为它现在是从缓存而不是从 Internet 加载 IMG。

  1. 如果我调用片段 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 的地方。

有人可以解释一下如何解决这个问题吗?

4

2 回答 2

1

首先获取cachefrom request queue

然后从缓存中的调用函数中删除您URL的(关键是您的网址)cacheremove

然后使用您的第一种方法:

mNetworkImageView = (NetworkImageView) getView().findViewById(R.id.networkImageView);
mImageLoader = VolleySingleton.getInstance(getActivity()).getImageLoader();
mNetworkImageView.setImageUrl(IMAGE_URL, mImageLoader);
于 2015-02-28T19:28:13.183 回答
1

这个问题和答案看起来很旧,但这些答案对我的项目不起作用。

为了您的帮助,我在这里写下我的解决方案。

问题是 VolleyNetworkImageView将图像缓存为地图,并且没有用于初始化缓存地图的 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 方法。

于 2016-05-09T07:26:33.230 回答