代码之家  ›  专栏  ›  技术社区  ›  Qk Lahpita

毕加索没有加载某些URL(包括http://or https://)

  •  1
  • Qk Lahpita  · 技术社区  · 6 年前

    我正在使用毕加索图书馆版本2.71828加载一些图像,但它不适用于所有URL。这是我的代码:

    Picasso.get().load(url).into(imageView);
    

    url1 : https://res.cloudinary.com/lastminute/image/upload/c_scale,w_630/v1431701424/52347407_Casino_Tower_2100x1400_pyzvxz.jpg

    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

    毕加索只与 url1 url2 。它不显示带有 url3 甚至我都可以在浏览器上打开它。

    为什么我可以加载 url3 和毕加索一起?毕加索不会加载哪些类型的url?

    3 回复  |  直到 6 年前
        1
  •  8
  •   Ramchandra Singh    6 年前

    毕加索直接不支持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自定义类来处理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;
        }
    }
    

    最后使用这样的类。

    PicassoTrustAll.getInstance(context)
                    .load(url)
                    .into(imageView);
    

    Please check This reference

    Read Reason behind https

        2
  •  2
  •   Amit Jangid    6 年前

    您可以使用通用图像加载器来实现这一点。原因是毕加索不支持“https”。 Check out this link for reference.

        3
  •  1
  •   Shubham    6 年前

    我能看到的唯一区别是格式。
    用于澄清

    .jpg // working
    .JPG // not working
    

    我猜如果你上传相同的图片。jpg这会有用的。

    希望有帮助!!