プロジェクトで 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;
}
上記のコードは問題なく動作します。ただし、Picasso ライブラリを使用し、以前は完全に機能していたコードは、次の例外をスローし始めます。
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 を削除すると、Picasso の行が機能します。
なぜそれが起こっているのですか?2 つのライブラリを一緒に使用するにはどうすればよいですか?