2016-08-24 5 views
0

Ich benutze Picasso-Bibliothek, um Bild von einer URL zu erhalten.
Mein Problem ist, wenn ich ein Bild zum ersten Mal lade und ich gehe aus meiner App und nachdem ich zurückkomme, versucht meine App das Bild wieder zu laden, aber ich will es nicht passieren. Gibt es eine andere Möglichkeit, dies zu tun (Laden Sie nur einmal das Bild und in anderen Zeiten brauchen Sie nicht Internet zum Laden)?Bild mit Picasso-Bibliothek einmal laden

+0

Bitte geben Sie den Code für die Verwendung von Picasso ein. –

+0

Verwenden Sie _Cache_ Strategie. – Piyush

+0

Picasso.mit (Aktivität) .load (cv.getAsString ("Bild")). Platzhalter (R.mipmap.onloading) .error (R.mipmap.onloading) .into (ivpicture); –

Antwort

0

Das Problem mit den oben genannten Antworten ist, dass sie die Verfügbarkeit der Bilder in dem Disk-Cache nur überprüfen, es erstreckt sich nicht auf die Teil, wenn das Bild nicht im Cache vorhanden ist, um online zu gehen und es abzurufen.

Zuerst machen Sie eine Klasse, die Anwendung erweitert (Sie können es nennen, was Sie wollen, die Ihre Anwendung nicht beeinträchtigt, meine Konvention ist "Global" zu verwenden).

public class Global extends Application { 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      Picasso.Builder builder = new Picasso.Builder(this); 
      builder.downloader(new OkHttpDownloader(this,Integer.MAX_VALUE)); 
      Picasso built = builder.build(); 
      built.setIndicatorsEnabled(false); 
      built.setLoggingEnabled(true); 
      Picasso.setSingletonInstance(built); 
     } 
} 

Stellen Sie sicher, dependancy für OkHttp Bibliothek hinzufügen, wird es von den gleichen Jungs von Picasso

compile 'com.squareup.okhttp:okhttp:2.4.0' 

und fügen Sie die Klasse in Ihrem Manifest-Datei Applications-Tag entwickelt:

android:name=".Global" 

Dann Wenn Sie das Bild abrufen möchten:

 Picasso.with(context) 
      .load(Image URL) 
      .networkPolicy(NetworkPolicy.OFFLINE) 
      .into(imageView, new Callback() { 
       @Override 
       public void onSuccess() { 
    } 

      @Override 
      public void onError() { 
      //Try again online if cache failed 
      Picasso.with(context) 
      .load(Image URL) 
      .into(imageView, new Callback() { 

       @Override 
       public void onSuccess() { 

       } 

       @Override 
       public void onError() { 
        Log.v("Picasso","Could not fetch image"); 
       } 
     }); 
    } 
    }); 

Die obige Methode überprüft, ob das Bild bereits zwischengespeichert ist, wenn es nicht aus dem Internet abgerufen wird.

+0

danke.Aber wenn ich nicht die globale Klasse was passiert (in der Tat verstehe ich nicht, was es getan hat) –

+0

Verwendung der Anwendungsklasse ist der Zugriff auf Variablen über die Anwendung, es ist eine gute Wahl, um alle zu setzen Diese Picasso-Einstellungen seit der Anwendungsklasse werden gestartet, bevor Aktivitäten oder Dienste ausgeführt werden. – RamithDR

+0

Sie können über Anwendung Klasse lesen und es ist hier verwendet: http://StackOverflow.com/Questions/18002227/Why-Extend-AnAnwendung-Klasse – RamithDR

0

versuchen Sie dies:

Picasso.with(this).load(url).networkPolicy(NetworkPolicy.OFFLINE).into(imageView); 
0

try this:

Picasso.with(this).invalidate(url); 
    Picasso.with(this) 
      .load(url) 
      .networkPolicy(
        NetworkUtils.isConnected(this) ? 
          NetworkPolicy.NO_CACHE : NetworkPolicy.OFFLINE) 
      .resize(200, 200) 
      .centerCrop() 
      .placeholder(R.mipmap.ic_avatar) 
      .error(R.mipmap.ic_avatar) 
      .into(imageView); 
+0

und eine andere Sache, die ich an einer anderen Stelle gelesen, wenn das Bild nicht im Cache ist Auf diese Weise ein Problem machen. –