2016-09-12 11 views
0

私はVolley network ImageViewを持っています。問題は画像がサーバー内で変更されても、古いものですが、キャッシュされた画像は古いものです。そうでない場合は、どのようにしてキャッシングを防ぐことができますか?ここ画像をキャッシュするのを防ぐために画像を

は私の現在のコードです:

private void networkImage(){ 
    String url = "http://example.com/profilePictures/"+username+".jpg"; 

    networkImageView = (NetworkImageView) findViewById(R.id.IBProfilePicture); 
    networkImageView.setOnClickListener(this); 

    RequestQueue networkQueue = Volley.newRequestQueue(getApplicationContext()); 
    networkQueue.getCache().remove(url); 
    networkQueue.getCache().clear(); 
    ImageLoader networkImageLoader = new ImageLoader(networkQueue, new ImageLoader.ImageCache() { 
     @Override 
     public Bitmap getBitmap(String url) { 
      return null; 
     } 

     @Override 
     public void putBitmap(String url, Bitmap bitmap) { 

     } 
    }); 

    networkImageView.setImageUrl(url,networkImageLoader); 
} 
+0

ユーザープロフィール画像URLの余分なタイムスタンプ引数を追加するためのrecommand。たぶんあなたはこれをチェックすることができます:http://stackoverflow.com/a/25302006/188784 – Gohan

答えて

3
  1. 可能な場合は、サーバーのキャッシュ戦略を変更します。
  2. request.setShouldCache(false)を使用して、リクエストのキャッシュを無効にすることができます。

(方法2の場合)ImageLoader.makeImageRequest()を上書きすることで可能です。

public class NoCacheImageLoader extends ImageLoader { 
    public NoCacheImageLoader(RequestQueue queue, ImageCache imageCache) { 
     super(queue, imageCache); 
    } 

    @Override 
    protected Request<Bitmap> makeImageRequest(String requestUrl, int maxWidth, int maxHeight, ImageView.ScaleType scaleType, String cacheKey) { 
     Request<Bitmap> request = super.makeImageRequest(requestUrl, maxWidth, maxHeight, scaleType, cacheKey); 
     // key method 
     request.setShouldCache(false); 
     return request; 
    } 
} 

その後、ImageLoaderの代わりにNoCacheImageLoaderを使用しています。今度は、イメージをディスクにキャッシュしません。

URLにタイムスタンプを追加する必要があります。なぜなら、URLが同じ場合、NetworkImageViewは画像を再度読み込まないためです。

+0

だから私はもはやストレージの問題はないと思いますか? –

3

は、このソリューションをお試しください:

private void networkImage(){ 
    String url = "http://example.com/profilePictures/"+username+".jpg"; 

    networkImageView = (NetworkImageView) findViewById(R.id.IBProfilePicture); 
    networkImageView.setOnClickListener(this); 

    RequestQueue networkQueue = Volley.newRequestQueue(getApplicationContext()); 
    ImageLoader networkImageLoader = new ImageLoader(networkQueue, new ImageLoader.ImageCache() { 
     @Override 
     public Bitmap getBitmap(String url) { 
      return null; 
     } 

     @Override 
     public void putBitmap(String url, Bitmap bitmap) { 

     } 
    }); 

    networkImageView.setImageUrl(url+"?time="+System.currentTimeMillis(),networkImageLoader); 
} 
+0

それは完全に動作しますが、それらのキャッシュされたイメージのすべてがストレージを埋めるでしょうか? –

+0

はい、あなたのイメージ用に他のストアキャッシュを作成します。あなたのケースでは、プロフィール画像のみが更新されている、私はストレージに問題はないと思う。 – phongvan

+0

まずは、ありがとうございます、キャッシュの制限はありますか?私は、アプリケーションには、キャッシュの制限があり、それがストレージ全体を満たすことができない場合、お互いのプロフィールを見ることができる100人以上のユーザーが含まれていることを意味します。 –

関連する問題