2017-05-05 72 views
0

我實際上在我的項目中使用畢加索。問題是:似乎沒有緩存,所以圖像重新加載所有的時間url(https)。離線時使用SSL加載畢加索圖像

我想要在磁盤緩存中的圖像。 我想要圖片緩存時已經下載的圖像,而不取決於如果WIFI關閉或不。

我創建了一個類(PicassoTrustAll.class)從HTTPS URL讓我的圖片:

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; 
     } 
} 

我用它是這樣的:

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

可能的重複[如何從緩存中顯示圖像使用畢加索圖像加載器時,無線關閉?](http://stackoverflow.com/questions/39137700/how-to-display-image-from-cache-using-picasso-image-loader-when-wifi-is-off ) –

+0

沒有真正的原因,因爲我想在圖像已經下載時獲取緩存圖片,而不是在WIFI關閉時。 –

+0

但我認爲這也適用於你的情況。 –

回答

0

它的工作使用OKHTTP :

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); 
          } 
         });