8

動的に生成された画像を読み込んでいるので、常に最新の状態にしたいと考えています。ただし、読み込みに時間がかかるので、更新されたバージョンが来ない間、キャッシュされたバージョンも表示したいと考えています。Universal Image Loader でこれを行うにはどうすればよいですか?

より具体的には、「displayImage」を呼び出すときに、次のことを行います。

  1. キャッシュされた画像が存在する場合は、すぐに表示します。
  2. とにかく、指定された URL からダウンロードを開始します。
  3. 画像の読み込みが終了したら、キャッシュされた画像を置き換えてビューに表示します。
  4. キャッシュを更新します。
4

3 に答える 3

26

したがって、最終的には次のように ImageLoadingListener を使用しました。

onLoadingStarted: 読み込みの開始時にキャッシュを確認します。

onLoadingComplete: キャッシュが見つからない場合は何もしません。リクエストはネットワークに送信され、キャッシュは自然に更新されます。それ以外の場合は、キャッシュをクリアして、displayImage を再度呼び出します (今回はリスナーは必要ありません)。キャッシュされた画像は、通常どおりビューに表示されます。また、2 回目の読み込みが完了すると、ビューとキャッシュが更新されます。

ImageLoader.getInstance().displayImage(imageUri, view, new SimpleImageLoadingListener() {
            boolean cacheFound;

            @Override
            public void onLoadingStarted(String url, View view) {
                List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(url, ImageLoader.getInstance().getMemoryCache());
                cacheFound = !memCache.isEmpty();
                if (!cacheFound) {
                    File discCache = DiscCacheUtils.findInCache(url, ImageLoader.getInstance().getDiscCache());
                    if (discCache != null) {
                        cacheFound = discCache.exists();
                    }
                }
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                if (cacheFound) {
                    MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());
                    DiscCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache());    
                    ImageLoader.getInstance().displayImage(imageUri, (ImageView) view);
                }
            }
        });
    }
于 2013-10-15T16:18:27.370 に答える
1

ImageLoadingListener を使用できます。このインターフェイスには、オーバーライドする 4 つのメソッドがあります: onLoadingStarted、onLoadingFailed、onLoadingComplete、onLoadingCancelled。onLoadingStarted では、画像をキャッシュされたものにすることができ、完了したら変更します。

したがって、呼び出しは次のようになります。

imgLoader.displayImage(url, myImageView,new ImageLoadingListener() 
{

        @Override
        public void onLoadingStarted(String arg0, View arg1) {
            //Display cached image if it exists

        }

        @Override
        public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onLoadingComplete(String arg0, View arg1, Bitmap arg2)
        {

            ((ImageView)arg1).setBitmapImage(arg2);
        }

        @Override
        public void onLoadingCancelled(String arg0, View arg1) {
            // TODO Auto-generated method stub

        }
});
于 2013-09-27T16:10:02.587 に答える