Problemas al utilizar unirest en Android Studio

He estado recibiendo algunos errores en mi logcat que bloqueo mi aplicación al intentar ejecutar algunas solicitudes unirest. Sé que tienes que generar un jar unirest especial con todas las dependencias pero he tenido problemas con maven y no lo hice, en cambio he incluido las dependencias separadas en la carpeta libs. He reducido el problema a este solo error a continuación.

Logcat:

java.lang.VerifyError: com/mashape/unirest/http/options/Options at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:154) at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131) at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68) 

Entiendo que el java.lang.verifyerror es causado por una biblioteca diferente dada en tiempo de compilación vs tiempo de ejecución. Pero no sé cómo arreglar esto. Por favor, ayuda, asegúrese de que todas las dependencias que necesito está por debajo ya que no he utilizado unirest antes de esto.

Build.Gradle:

 dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile files('libs/unirest-java-1.3.20.jar') compile files('libs/rebound-0.3.6.jar') compile files('libs/commons-io-2.4.jar') compile files('libs/json-20140107.jar') compile files('libs/httpmime-4.3.5.jar') compile files('libs/httpclient-4.3.5.jar') compile files('libs/httpasyncclient-4.0.2.jar') compile files('libs/httpcore-4.3.2.jar') compile files('libs/commons-codec-1.6.jar') compile files('libs/commons-logging-1.1.3.jar') } 

Cómo se ve mi carpeta de librerías:

 commons-io-2.4.jar httpcore-4.3.2.jar httpclient-4.3.5.jar commons-logging-1.1.3.jar json-20140107.jar rebound-0.3.6.jar unirest-java-1.3.20.jar commons-codec-1.6.jar httpmime-4.3.5.jar httpasyncclient-4.0.2.jar 

También incluido esto en el build.gradle porque estaba recibiendo un error de archivo duplicado al intentar construir el archivo gradle:

 packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } 

Sé que ha pasado un tiempo desde que usted hizo esa pregunta. Creo que Android sobrescribe las clases comunes ubicadas en org.apache.http. No puede sobrescribirlas por usted mismo. Trate de reubicar los paquetes descargados a otra ubicación como surrogate.org.apache.http para usarlos correctamente.

Desde https://hc.apache.org/httpcomponents-client-4.3.x/android-port.html :

Google Android 1.0 fue lanzado con una instantánea pre-BETA de Apache HttpClient. Para coincidir con la primera versión de Android, las API de Apache HttpClient 4.0 tuvieron que ser congeladas prematuramente, mientras que muchas de las interfaces y estructuras internas aún no estaban completamente desarrolladas. Como Apache HttpClient 4.0 estaba madurando el proyecto esperaba que Google incorporara las últimas mejoras de código en su árbol de código. Desafortunadamente no sucedió. Versión de Apache HttpClient enviado con Android se ha convertido en un bifurcación. Finalmente, Google decidió interrumpir el desarrollo de su bifurcación mientras se negaba a actualizar a la versión de stock de Apache HttpClient citando problemas de compatibilidad como una razón para tal decisión. Como resultado, los desarrolladores de Android que deseen continuar utilizando las API de Apache HttpClient en Android no pueden aprovechar las características más recientes, las mejoras de rendimiento y las correcciones de errores.

Si sigue leyendo encontrará lo siguiente:

Algunas de las clases de implementación tuvieron que ser copiadas (o sombreadas) con nombres diferentes para evitar conflictos con las versiones anteriores de las mismas clases incluidas en el runtime de Android. Se puede aumentar la compatibilidad con la versión de HttpClient, evitando las clases 'org.apache.http. **. * HC4'.

Utilizar

 dependencies { compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

Para incluir los httpcomponents.

Puede que tenga que usar el complemento shadowJar para reubicar sus dependencias si no desea reubicarlas manualmente.

Editar:

He encontrado este tutorial impresionante que funcionó para mí. Incluso pensé que recomendaría usar AndroidAsync o Volley para crear conexiones a un servidor web.

  • La instalación de SDK de Android no encuentra JDK
  • Android: HorizontalScrollView dentro de ScrollView
  • ¿Hay una manera de convertir una aplicación de Android en una aplicación de escritorio?
  • Incrustar Python en Java en Android
  • Android Thread.sleep () en AsyncTask congelar la interfaz de usuario
  • ¿Cómo interpreta Android la palabra clave @null en los diseños?
  • Música de backround de Android a través de múltiples actividades; Cómo presionar el botón Inicio
  • Proteger la aplicación de la descompilación ocultando Manifest y convirtiendo el código en un carácter Unicode
  • ¿Cómo puedo mostrar la imagen en la aplicación de Android
  • ¿Funcionarán más rápido si hago que mis variables sean definitivas?
  • Cómo afirmar dentro de un RecyclerView en Espresso?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.