2016-06-15 18 views
2

私のアプリのプロフィールページを構築しています。私は前のプロフィール画像をタップすると、そのプロフィール画像を変更することができるようにしました。アップロードした後、プロフィール画像が瞬時に更新されるようにしたいと思います。 Picassoを使ってみましたが、キャッシュに問題があるようです。実際には、ユーザーが自分の画像を選択した後、表示される画像は、以前の画像ファイルを上書きしてPicassoを再適用したにもかかわらず、以前と同じです。私は22PIcassoで永続的なサムネイル

Profile.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.profile); 

    ImageView pic = (ImageView) findViewById(R.id.picc); 


     ... 

     String root = Environment.getExternalStorageDirectory().toString(); 
     String path = root + "/directory/name.jpg"; 

     MainActivity.trimCache(this); 
     Picasso.with(getApplicationContext()).load(path) 
        .networkPolicy(NetworkPolicy.NO_CACHE) 
        .memoryPolicy(MemoryPolicy.NO_CACHE) 
       .transform(new RoundedTransformation(1000, 0)) 
        .resize(500, 500) 
        .centerCrop() 
       .into(pic); 
    } 



    pic.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent chooseImageIntent = ImagePicker.getPickImageIntent(getApplicationContext()); 
      startActivityForResult(chooseImageIntent, PICK_IMAGE_ID); 
     } 
    }); 

} 




    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      Bitmap bitmap = ImagePicker.getImageFromResult(this, resultCode, data); 

      ImageView pic = (ImageView) findViewById(R.id.picc); 

      RetrieveFeedTask job = new RetrieveFeedTask(data, resultCode, this, bitmap); 
      job.execute("user","pass"); 

      String root = Environment.getExternalStorageDirectory().toString(); 
      String path = root + "/directory/name.jpg"; 
      MainActivity.trimCache(this); 
      Picasso.with(getApplicationContext()).load(path) 
        .networkPolicy(NetworkPolicy.NO_CACHE) 
        .memoryPolicy(MemoryPolicy.NO_CACHE) 
        .transform(new RoundedTransformation(1000, 0)) 
        .resize(500, 500) 
        .centerCrop() 
        .into(pic); 
    } 

ImagePicker.javaは、標準的なイメージピッカーファイルであるAndroidのAPIを使用しています。

私もピカソのインスタンス以下の機能

public static void trimCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

答えて

1

でアプリからキャッシュを削除しようとした、デフォルトでは、メモリキャッシュを保持しています。 Picassoはキャッシュ(この場合はpath)と同じキーを見て、単にそのキーから取得したキャッシュからBitmapインスタンスを返します。

キャッシュチェックをスキップするにはmemoryPolicy(MemoryPolicy.NO_CACHE)という正しい場所があります。あなたはそれが変更/更新後にイメージを求めていることを確信していますか?

関連する問題