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:
- Extraño error "java.io.IOException: EOF" en Android
- Cómo cambiar programatically Edittext Cursor Color en android?
- NDK vs JAVA rendimiento
- Comprueba si es el primer usuario de mi aplicación en Android
- Cómo utilizar DataBindingUtil con una ruleta Android?
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' }
- ¿Cómo puedo crear un bloqueo (concurrent.locks.Lock) en Android?
- Cómo hacer que una aplicación funcione por solo 3 días
- ¿Cómo implementar la comunicación entre la aplicación cliente Java (Android) y la aplicación de servidor PHP?
- Anotación @Override en Android
- Android FragmentActivity devuelve null en getActionBar ()
- No se puede instanciar la aplicación com.android.tools.fd.runtime.BootstrapApplication
- Contar todos los valores Firebase Java API
- Android Studio - No se pudo determinar la versión de Java
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.
- ¿Cuál es el significado de combos almuerzo de AOS y qué debo elegir?
- ¿Cómo utilizo JNI con la biblioteca AAR?