使用 SSL 离线时使用 Picasso 加载图像
Load image with Picasso when offline using SSL
我实际上在我的项目中使用 Picasso。问题是:似乎没有缓存,所以图像一直在重新加载 url (https)。
我想将图像保存在磁盘缓存中。
我要的是图片已经下载时的图片缓存,不依赖WIFI是否关闭。
我创建了一个 class (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);
它正在使用 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);
}
});
我实际上在我的项目中使用 Picasso。问题是:似乎没有缓存,所以图像一直在重新加载 url (https)。
我想将图像保存在磁盘缓存中。 我要的是图片已经下载时的图片缓存,不依赖WIFI是否关闭。
我创建了一个 class (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);
它正在使用 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);
}
});