Picasso 不加载一些 URL (包括 http:// 或 https://)
Picasso does not load some URL (included http:// or https://)
我正在使用 Picasso 库版本 2.71828 加载一些图像,但它不适用于所有 URL。这是我的代码:
Picasso.get().load(url).into(imageView);
url2
: http://images.foody.vn/res/g14/138986/prof/s576x330/foody-mobile-a2-jpg-261-635682356468932282.jpg
url3
: https://static3.mytour.vn/resources/pictures/hotels/19/large_vlj1419841660_khach-san-gia-han.JPG
Picasso 仅适用于 url1
和 url2
。它不显示带有 url3
的图像,即使我可以在浏览器上打开它。
为什么我可以用 Picasso 加载 url3
? Picasso 不加载哪些类型的url?
我能看到的唯一区别是格式。
为了澄清
.jpg // working
.JPG // not working
我想如果您以 .jpg 格式上传相同的图片,它就可以了。
希望对您有所帮助!!
Picasso 直接不支持https。所以你必须合并这个包。
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.picasso:picasso:2.4.0'
并添加 picasso 自定义 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", exception);
}
}).build();
}
public static Picasso getInstance(Context context) {
if (mInstance == null) {
new PicassoTrustAll(context);
}
return mInstance;
}
}
终于像那样使用class。
PicassoTrustAll.getInstance(context)
.load(url)
.into(imageView);
Please check This reference
您可以使用 Universal Image Loader 来实现这一点。原因是 Picasso 不支持 "https"。 Check out this link for reference.
我正在使用 Picasso 库版本 2.71828 加载一些图像,但它不适用于所有 URL。这是我的代码:
Picasso.get().load(url).into(imageView);
url2
: http://images.foody.vn/res/g14/138986/prof/s576x330/foody-mobile-a2-jpg-261-635682356468932282.jpg
url3
: https://static3.mytour.vn/resources/pictures/hotels/19/large_vlj1419841660_khach-san-gia-han.JPG
Picasso 仅适用于 url1
和 url2
。它不显示带有 url3
的图像,即使我可以在浏览器上打开它。
为什么我可以用 Picasso 加载 url3
? Picasso 不加载哪些类型的url?
我能看到的唯一区别是格式。
为了澄清
.jpg // working
.JPG // not working
我想如果您以 .jpg 格式上传相同的图片,它就可以了。
希望对您有所帮助!!
Picasso 直接不支持https。所以你必须合并这个包。
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.picasso:picasso:2.4.0'
并添加 picasso 自定义 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", exception);
}
}).build();
}
public static Picasso getInstance(Context context) {
if (mInstance == null) {
new PicassoTrustAll(context);
}
return mInstance;
}
}
终于像那样使用class。
PicassoTrustAll.getInstance(context)
.load(url)
.into(imageView);
Please check This reference
您可以使用 Universal Image Loader 来实现这一点。原因是 Picasso 不支持 "https"。 Check out this link for reference.