【问题标题】:Load image with Picasso when offline using SSL使用 SSL 离线时使用 Picasso 加载图像
【发布时间】:2017-06-09 15:23:15
【问题描述】:

我实际上在我的项目中使用了毕加索。问题是:似乎没有缓存,所以图像一直在重新加载 url (https)。

我想将图像保存在磁盘缓存中。 我要的是图片已经下载后的图片缓存,不取决于WIFI是否关闭。

我创建了一个类 (PicassoTrustAll.class) 来从 HTTPS 网址获取我的图片:

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

【问题讨论】:

标签: android picasso


【解决方案1】:

它使用 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); 
                            } 
                        });

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-08-14
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多