android - library - OkHTTP y Picasso no se ejecutan juntos
retrofit vs okhttp android (6)
Cambia a Picasso 2.3.2. También necesitarás okhttp-urlconnection-2.0.0-RC2.
Utilizo la biblioteca Picasso en mi proyecto para cargar imágenes y almacenarlas en caché. Funciona bien sin ningún problema. Sin embargo, cuando intento usar la biblioteca OkHttp para realizar la comunicación de datos con mi servidor (comunicación JSON), Picasso genera excepciones.
Uso los siguientes archivos jar: okhttp-2.0.0-RC2, okio-1.0.0, picasso-2.2.0. Cuando ejecuto mi proyecto después de agregar estos archivos jar, se bloquea con lo siguiente:
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>
Agregué okhttp solo para usar el siguiente método:
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;
}
El código anterior funciona sin ningún problema. Sin embargo, los códigos que utilizan la biblioteca de Picasso y que funcionaban perfectamente, comienzan a lanzar la siguiente opción:
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)
Mi camino de clase:
Si elimino okhttp-2.0.0-RC2, okio-1.0.0, las líneas de Picasso funcionan.
¿Por qué está sucediendo eso? ¿Cómo puedo usar dos bibliotecas juntas?
Esta combinación funciona para mí:
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''
Picasso utiliza 3 paquetes.
- Square.OkHttp
- Square.OkIO
- Plaza.Picasso
Desea agregar 2 veces el paquete OkHttp y OkIO debido al uso de la biblioteca OkHttp y la biblioteca Picasso.
Los 2 paquetes están incluidos en Picasso, no necesita incluir la biblioteca OkHttp en su proyecto.
Prueba estos:
compile ''com.squareup.picasso:picasso:2.5.2''
compile ''com.squareup.okhttp3:okhttp:3.0.1''
//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)
El código anterior funciona bien para mí.