21

プロジェクトで 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 つのライブラリを一緒に使用するにはどうすればよいですか?

4

6 に答える 6

22

この組み合わせは私にとってうまくいきます:

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'
于 2015-01-31T13:02:13.760 に答える
19

Picasso 2.3.2 に切り替えます。また、okhttp-urlconnection-2.0.0-RC2 も必要です。

于 2014-06-12T12:06:13.563 に答える
6
//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)

上記のコードは私にとってはうまくいきます。

于 2014-06-12T08:45:46.820 に答える
1

ピカソは 3 つのパッケージを使用します。

  1. Square.OkHttp
  2. Square.OkIO
  3. Square.Picasso

OkHttp ライブラリと Picasso ライブラリを使用しているため、OkHttp と OkIO パッケージを 2 回追加する必要があります。

2 つのパッケージは Picasso に含まれています。プロジェクトに OkHttp ライブラリを含める必要はありません。

于 2016-01-27T08:24:25.213 に答える
0

Eclipse IDE を使用している場合は、プロジェクト プロパティ -> Java ビルド パス -> 順序とエクスポート (最後のタブ) で picasso ライブラリを確認します。

同じエラーがありました。それは私のために働いた、それが役立つことを願っています。 ここに画像の説明を入力

于 2016-06-06T07:12:17.800 に答える
0

これらを試してください:

compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp3:okhttp:3.0.1'
于 2016-01-20T11:06:41.740 に答える