2017-05-05 5 views
0

Ich benutze Picasso tatsächlich in meinem Projekt. Das Problem ist: es scheint, dass es keinen Cache gibt, so dass das Bild die ganze Zeit die URL (https) neu lädt.Bild mit Picasso laden, wenn offline mit SSL

Ich möchte die Bilder im Disk-Cache haben. Ich möchte den Cache des Bildes, wenn das Bild bereits heruntergeladen wurde, unabhängig davon, ob das WLAN ausgeschaltet ist oder nicht.

Ich habe eine Klasse (PicassoTrustAll.class) geschaffen, um meine Bilder von einer HTTPS-URL zu erhalten:

public class PicassoTrustAll { 

     private static Picasso mInstance = null; 

     private PicassoTrustAll(Context context) { 
      OkHttpClient client = new OkHttpClient(); 
      client.setHostnameVerifier(new HostnameVerifier() { 
       @Override 
       public boolean verify(String s, SSLSession sslSession) { 
        return true; 
       } 
      }); 
      TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
       @Override 
       public void checkClientTrusted(
         java.security.cert.X509Certificate[] x509Certificates, 
         String s) throws java.security.cert.CertificateException { 
       } 

       @Override 
       public void checkServerTrusted(
         java.security.cert.X509Certificate[] x509Certificates, 
         String s) throws java.security.cert.CertificateException { 
       } 

       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return new java.security.cert.X509Certificate[] {}; 
       } 
      } }; 
      try { 
       SSLContext sc = SSLContext.getInstance("TLS"); 
       sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
       client.setSslSocketFactory(sc.getSocketFactory()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      mInstance = new Picasso.Builder(context) 
        .downloader(new OkHttpDownloader(client)) 
        .listener(new Picasso.Listener() { 
         @Override 
         public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
          Log.e("PICASSO", String.valueOf(exception)); 
         } 
        }).build(); 

     } 

     public static Picasso getInstance(Context context) { 
      if (mInstance == null) { 
       new PicassoTrustAll(context); 
      } 
      return mInstance; 
     } 
} 

Und ich benutze es wie folgt aus:

PicassoTrustAll.getInstance(v.getContext()) 
       .load(image_url) 
       .placeholder(R.drawable.progress_animation) 
       .into(photo); 
+0

Mögliches Duplikat von [Wie Bild aus Cache anzeigen Picasso Image Loader verwenden, wenn WLAN ausgeschaltet ist?] (http://stackoverflow.com/questions/39137700/how-to-display-image-from-cache-using-picasso-image-loader-when-wifi-is-off) –

+0

Nein wirklich, weil ich das Cache-Bild möchte, wenn das Bild bereits heruntergeladen wurde, nicht wenn das WLAN ausgeschaltet ist. –

+0

Aber ich denke das trifft auch auf deine Situation zu. –

Antwort

0

Es funktioniert OKHTTP mit :

Picasso.with(context).load("url") 
         .networkPolicy(NetworkPolicy.OFFLINE) 
         .into(photo, new Callback() { 
          @Override 
          public void onSuccess() { 

          } 

          @Override 
          public void onError() { 
           Picasso.with(context) 
             .load("url") 
           .placeholder(R.mipmap.ic_launcher) 
           .error(R.drawable.user_error) 
             .into(picture); 
          } 
         });