2014-07-27 5 views
5

요청과 함께 일부 헤더 (사용자 이름, 비밀번호)가 필요한 URL에서 이미지를 다운로드해야합니다. 그래서 나는 주어진 코드 here을 사용하여 그것을하고있다. 그러나이 함수를 호출하면 오류Picasso를 사용한 맞춤식 다운로더

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

나는 피카소 2.3.3 이용하고 있고 okhttp - URLConnection의-2.0.0-RC2 라이브러리 이 문제는 또한 this 게시물에 제기되었지만 2.3.2 나던 작품에 변화를 준다 .

답변

7

프로젝트에 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(); 
} 
+0

-RC2 라이브러리. 그래서 내가 okHttp도 포함시켜야합니까? – Diffy

+0

[http://stackoverflow.com/a/24183951/1268021](this) 대답을 기반으로 어디에 그가 okhttp-urlconnection _also_가 포함되어 있다고 말하면 표준 okhttp 라이브러리가 필요하다고 생각할 수 있습니다. 열쇠는 간단히 ConnectionDownloader입니다. 원하는 경우 UrlConnectionDownloader를 대신 사용할 수 있습니다. –

+0

예 okhttp가 포함되어 있으며 오류가 발생하지 않습니다. – Diffy

4

피카소 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(); 

자료 : I는 okhttp - URLConnection의-2.0.0를 포함하고 https://github.com/square/picasso/issues/900