2016-09-30 12 views
0

SwipeRefreshLayoutをリフレッシュすると、次のコードが実行されます。これで新しいプロファイル画像が読み込まれますが、古い画像が何らかの形でデバイスにキャッシュされているように見えます。アプリを終了してアクティビティに戻ると、新しいプロフィール画像が利用できます。しかし、爽やかでは解決しません。私はここで何ができますか?Webサービスからデータをロードした後のリフレッシュ時のPicassoイメージキャッシュの消去

スワイプ:

private void setSwipeRefreshLayout(boolean isOnline, String userId) { 
     mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); 
     mSwipeRefreshLayout.setOnRefreshListener(() -> { 
      if (!isOnline) { 
       mSwipeRefreshLayout.setRefreshing(false); 
      } else { 
       if (mSwipeRefreshLayout.isRefreshing()) { 
        mSwipeRefreshLayout.setRefreshing(false); 
       } 

       if (userId != null && userId.equals(ParseUser.getCurrentUser().getObjectId())) { 
        createProfileHeader(userId); 
        Picasso.with(getApplicationContext()).invalidate(imagePath); 
       } 

      } 
     }); 
    } 

解析からプロフィール画像取得:私は、画像をダウンロードしていますので、私は、私は上記のimagePathを取得したいかどうかはわかりません

if (headerUserObject.getParseFile("profilePicture") != null) { 

    Picasso.with(getApplicationContext()) 
      .load(headerUserObject.getParseFile("profilePicture").getUrl()) 
      .placeholder(R.color.placeholderblue) 
      .into(((ImageView) findViewById(R.id.profile_picture))); 

    fadeInProfilePicture(); 
} 

をインターネットから。しかし、これは私がやるべきことではないかもしれない?

答えて

2

を使用してみてくださいそのファイルのキャッシュが存在する場合、最初のキャッシュファイルを更新し、キャッシュから画像をロードします私のコードです。存在しない場合は、インターネット(URL)からロードします。

Picasso.with(getApplicationContext()).load(headerUserObject.getParseFile("profilePicture").getUrl()) 
      .placeholder(R.color.placeholderblue).networkPolicy(NetworkPolicy.OFFLINE) // try to load the image from cache first 
      .into(((ImageView) findViewById(R.id.profile_picture)), new Callback() { 
         @Override 
         public void onSuccess() { 
          //cache file for this url exists, now update the cache for this url 
          if(networkAvaialable()) // if internet is working update the cache file 
           Picasso.with(getApplicationContext()).invalidate(headerUserObject.getParseFile("profilePicture").getUrl()); 
         } 

         @Override 
         public void onError() { // if cache file does not exist load it from the internet 
          Picasso.with(getApplicationContext()).load(headerUserObject.getParseFile("profilePicture").getUrl()) 
          .placeholder(R.color.placeholderblue) 
          .into(((ImageView) findViewById(R.id.profile_picture))); 
         } 
        }); 
+0

私は '' Network.OFFLINE''が '' NetworkPolicy.OFFLINE''すべきだと思いますが、それ以外は私の問題を解決しました。乾杯。 – santafebound

+0

ええ、申し訳ありません、私はちょうどメモ帳に入力したので、私のエラーを探すエディタはありませんでした。 –

1

は、ここでは、この

Picasso.memoryPolicy(MemoryPolicy.NO_CACHE).into(image);