web-dev-qa-db-fra.com

OkHTTP et Picasso ne fonctionnent pas ensemble

J'utilise la bibliothèque Picasso dans mon projet pour charger des images et les mettre en cache. Cela fonctionne bien sans aucun problème. Cependant, lorsque j'essaie d'utiliser la bibliothèque OkHttp pour effectuer une communication de données avec mon serveur (communication JSON), Picasso lève des exceptions.

J'utilise les pots suivants: okhttp-2.0.0-RC2, okio-1.0.0, picasso-2.2.0. Lorsque j'exécute mon projet après avoir ajouté ces pots, il se bloque avec les éléments suivants:

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>

J'ai ajouté okhttp juste pour utiliser la méthode suivante:

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;
}

Le code ci-dessus fonctionne sans aucun problème. Cependant, les codes qui utilisent la bibliothèque Picasso et fonctionnaient parfaitement, commencent à lancer l'exception suivante:

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)

Mon chemin de classe:

enter image description here

Si je supprime okhttp-2.0.0-RC2, okio-1.0.0, les lignes Picasso fonctionnent.

Pourquoi cela se produit-il? Comment puis-je utiliser deux bibliothèques ensemble?

20
ftb

Cette combinaison fonctionne pour moi:

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'
22
marioosh

Passez à Picasso 2.3.2. Vous aurez également besoin de okhttp-urlconnection-2.0.0-RC2.

19
Jesse Wilson
//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)

Le code ci-dessus fonctionne bien pour moi.

5
Yogesh Narayanan

Picasso utilise 3 packages.

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

Vous souhaitez ajouter 2 fois le package OkHttp et OkIO en raison de l'utilisation de la bibliothèque OkHttp et de la bibliothèque Picasso.

Les 2 packages sont inclus dans Picasso, vous n'avez pas besoin d'inclure la bibliothèque OkHttp dans votre projet.

1
Robin Bruneel

Si vous utilisez Eclipse IDE, dans les propriétés du projet-> Chemin de génération Java-> Ordre et exportation (dernier onglet) consultez la bibliothèque Picasso

J'ai eu les mêmes erreurs. cela a fonctionné pour moi, j'espère que cela aide. enter image description here

0
Code_Worm

Essayez-les:

compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp3:okhttp:3.0.1'
0
vlasentiy