【问题标题】:Custom Downloader using Picasso使用毕加索的自定义下载器
【发布时间】:2014-09-18 19:51:40
【问题描述】:

我必须从需要一些标头(用户名、密码)以及请求的 URL 下载图像。所以我使用here 给出的代码来做这件事。但是调用这个函数会报错

java.lang.NoClassDefFoundError: com.squareup.okhttp.OkHttpClient
at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.java:72)

我正在使用 Picasso 2.3.3 和 okhttp-urlconnection-2.0.0-RC2 库 该问题已在this 帖子中提出,但更改为 2.3.2 不起作用。

【问题讨论】:

    标签: android image picasso


    【解决方案1】:

    由于 Picasso 2.5.0 OkHttpDownloader 类已经改变,所以你必须这样做:

    OkHttpClient picassoClient = new OkHttpClient();
    
    picassoClient.networkinterceptors().add(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request newRequest = chain.request().newBuilder()
                        .addHeader("X-HEADER", "VAL")
                        .build();
                return chain.proceed(newRequest);
            }
    });
    
    new Picasso.Builder(context).downloader(new OkHttpDownloader(picassoClient)).build();
    

    来源:https://github.com/square/picasso/issues/900

    【讨论】:

      【解决方案2】:

      你的项目中包含 OkHttp 吗?如果没有,问题是您使用的是 OkHttpDownloader。您可以在项目中包含 OkHttp 库,也可以像下面那样仅包含 UrlConnectionDownloader。

      这是我最终得到的结果。

      public static Picasso getImageLoader(Context ctx) {
          Picasso.Builder builder = new Picasso.Builder(ctx);
      
          builder.downloader(new UrlConnectionDownloader(ctx) {
              @Override
              protected HttpURLConnection openConnection(Uri uri) throws IOException {
                  HttpURLConnection connection = super.openConnection(uri);
                  connection.setRequestProperty("X-HEADER", "VAL");
                  return connection;
              }
          });
      
          return builder.build();
      }
      

      【讨论】:

      • 我包括 okhttp-urlconnection-2.0.0-RC2 库。那么我还必须包含 okHttp 吗?
      • 基于 [stackoverflow.com/a/24183951/1268021](this) 回答,他说包括 okhttp-urlconnection ,我敢猜测您确实需要标准的 okhttp 库。关键就是 ConnectionDownloader。如果您愿意,可以使用 UrlConnectionDownloader。
      • 我正在使用它来调用 getImageLoader(context).load(uri).into(image);那么它会将uri参数传递给UrlConnectionDownloader吗?
      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多