私のプロジェクトではPicassoライブラリを使用して、画像を読み込んでキャッシュしています。問題なく動作します。しかし、OkHttpライブラリを使用してサーバーとのデータ通信(JSON通信)を実行しようとすると、Picassoが例外をスローします。
私は次のjarファイルを使用します:okhttp-2.0.0-RC2、okio-1.0.0、picasso-2.2.0。これらのjarを追加した後でプロジェクトを実行すると、次のようにクラッシュします。
06-12 11:13:15.824: E/dalvikvm(12105): Could not find class 'com.squareup.okhttp.HttpResponseCache', referenced from method com.squareup.picasso.OkHttpDownloader.<init>
次の方法を使用するためだけにokhttpを追加しました。
public static String executeHttpGet(String urlStr) {
Response response = null;
String result = "";
OkHttpClient client = new OkHttpClient();
try {
Request request = new Request.Builder().url(urlStr).build();
response = client.newCall(request).execute();
result = response.body().string();
} catch (Exception ex) {
}
return result;
}
上記のコードは問題なく動作します。ただし、ピカソライブラリを使用して完全に機能していたコードは、次の例外をスローし始めます。
06-12 11:19:49.307: E/AndroidRuntime(13036): FATAL EXCEPTION: main
06-12 11:19:49.307: E/AndroidRuntime(13036): Java.lang.NoClassDefFoundError: com.squareup.okhttp.HttpResponseCache
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:74)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:51)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:41)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.Utils$OkHttpLoaderCreator.create(Utils.Java:319)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.Utils.createDefaultDownloader(Utils.Java:171)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.Picasso$Builder.build(Picasso.Java:490)
06-12 11:19:49.307: E/AndroidRuntime(13036): at com.squareup.picasso.Picasso.with(Picasso.Java:390)
私のクラスパス:
Okhttp-2.0.0-RC2、okio-1.0.0を削除すると、ピカソの線が機能します。
なぜそれが起こっているのですか? 2つのライブラリを一緒に使用するにはどうすればよいですか?
この組み合わせは私にとってはうまくいきます:
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'
ピカソ2.3.2に切り替えます。また、okhttp-urlconnection-2.0.0-RC2も必要です。
//Below code for Picasso initializing once for the app
private Picasso picasso;
private OkHttpClient okHttpClient;
okHttpClient = new OkHttpClient();
picasso = new Picasso.Builder(this)
.downloader(new OkHttpDownloader(okHttpClient))
.build();
//Below code to retrieve the images whereever required on the app
picasso.with(context).load(imageUrl).placeholder(R.drawable.ic_launcher)
上記のコードは私にとってはうまくいきます。
Picassoは3つのパッケージを使用しています。
OkHttpライブラリーとPicassoライブラリーを使用しているため、OkHttpおよびOkIOパッケージを2回追加する必要があります。
2つのパッケージはPicassoに含まれています。プロジェクトにOkHttpライブラリを含める必要はありません。
これらを試してください:
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp3:okhttp:3.0.1'