2016-06-15 13 views
2

Ich erstelle eine Profilseite für meine App. Ich habe es so gemacht, dass beim Tippen auf das vorherige Profilbild der Benutzer sein Profilbild ändern kann. Ich möchte, dass nach dem Upload das Profilbild sofort aktualisiert wird. Ich habe versucht, Picasso zu verwenden, aber es scheint einige Probleme mit dem Cache zu haben. In der Tat, nachdem der Benutzer sein Bild gewählt hat, ist das Bild, das angezeigt wird, das gleiche wie zuvor, trotz der Tatsache, dass die App die vorherige Bilddatei überschreibt und Picasso erneut anwendet. Ich bin mit Android API 22.Persistente Thumbnails mit PIcasso

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 ist ein Standardbild-Picker-Datei.

Ich habe auch versucht, den Cache aus der App mit der folgenden Funktion standardmäßig halte Cache einen Speicher

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

Antwort

1

Die Picasso-Instanz, zu löschen. Picasso sieht den gleichen Schlüssel für den Cache (in diesem Fall path) und gibt einfach die Bitmap-Instanz aus dem Cache zurück, den sie von diesem Schlüssel erhält.

Sie haben das Richtige mit memoryPolicy(MemoryPolicy.NO_CACHE), um den Cache-Check zu überspringen; Bist du sicher, dass du das Bild nach der Änderung/Aktualisierung so anrufst?