毕加索没有在ImageView中加载图片

时间:2015-08-20 11:45:11

标签: android ssl picasso okhttp

我正在尝试使用Picasso来在ListView中加载延迟图片。但它实际上不起作用。在我的自定义适配器中,我获取ImageView,初始化Picasso对象并指示将图像加载到指定的ImageView中。 要从服务器检索图片,我需要提供基本身份验证,因此我创建了一个自定义拦截器,用于添加身份验证标头。 此外,我需要信任每个SSL证书,因为目前证书没有签名。 我面临的行为:

  1. 身份验证错误 - >我添加了标题。错误消失了。
  2. SSL证书信任错误 - >我添加了一个SslSocketFactory,就像我用于所有凌空请求的那个一样。错误消失了。
  3. 但是仍然有任何图片正在加载,现在出现任何错误。

    上面是构建Picasso对象的代码:

    public Picasso getPicassoDownloader() throws NoSuchAlgorithmException, KeyManagementException
    {
    
    
        TrustManager[] trustAllCerts = new TrustManager[] { 
                new X509TrustManager() {
    
                    @Override
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {}
    
                    @Override
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {}
    
    
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        X509Certificate[] myTrustedAnchors = new X509Certificate[0];  
                        return myTrustedAnchors;
                    }
                }
            };
    
         SSLContext sc = SSLContext.getInstance("SSL");
         sc.init(null, trustAllCerts, new SecureRandom());
    
    
        Picasso.Builder builder = new Picasso.Builder(getContext()).listener(new Listener() {
    
            @Override
            public void onImageLoadFailed(Picasso arg0, Uri arg1, Exception ex) {
                ex.printStackTrace();
    
            }
        });
    
        OkHttpClient client = new OkHttpClient();
        client.setSslSocketFactory(sc.getSocketFactory());
        client.setHostnameVerifier(new HostnameVerifier() {
    
            @Override
            public boolean verify(String hostname, SSLSession session) {
                // TODO Auto-generated method stub
                return true;
            }
        });
    
        client.networkInterceptors().add(new BasicAuthInterceptor());
    
        Downloader downloader = new OkHttpDownloader(client);
    
        return builder.downloader(downloader).build();
    }
    

    然后,我如何将Picasso对象用于我的适配器的getView方法:

    ImageView imageView = (ImageView) convertView.findViewById(R.id.productImage);
    
                Picasso picasso = null;
    
                picasso.load(produit.getImageDefaultUri()).fit().into(imageView, new Callback(){
    
                    @Override
                    public void onError() {
                        System.out.println("Error");
    
                    }
    
                    @Override
                    public void onSuccess() {
                        System.out.println("Success");
    
                    }
    
                });
    

    这是一个膨胀的布局,其中包含必须加载图片的ImageView。

    <RelativeLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:orientation="horizontal">
    
                <ImageView
                    android:id="@+id/productImage"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:padding="5dp"
                    android:contentDescription="Product Image" />
    
                <ProgressBar
                  android:id="@+id/progressBar"
                  style="?android:attr/progressBarStyleLarge"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_centerHorizontal="true"
                  android:layout_centerVertical="true"
                  android:visibility="visible"
                  android:indeterminateDrawable="@drawable/progressbar" >
               </ProgressBar>
    
             </RelativeLayout>
    

    如果有人可以帮助我,那会很棒!提前致谢

1 个答案:

答案 0 :(得分:1)

这似乎是一个很明显的错误,但你使用了一个空的毕加索引用,而不是使用Picasso picasso = getPicassoDownloader();。我遇到了类似的问题并使用您的示例How to add authentication token in header in Picasso library解决了问题。