2017-05-05 7 views
0

私は実際に自分のプロジェクトでPicassoを使用しています。問題は、キャッシュがないように見えるので、イメージが常にURL(https)をリロードしていることです。SSLを使用してオフラインでPicassoで画像をロード

イメージをディスクキャッシュに入れたいと思っています。 WIFIがオフであるかどうかによらず、画像が既にダウンロードされているときに画像のキャッシュが必要です。

私はHTTPSのURLから私の画像を取得するには、クラス(PicassoTrustAll.class)を作成しました:

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

[キャッシュから画像を表示する方法wifiがオフのときにピカソ画像ローダーを使用しますか?](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); 
          } 
         }); 
関連する問題