Android desaprobó el módulo de Apache (HttpClient, HttpResponse, etc.)

Android ha dejado de utilizar el módulo de Apache desde el nivel API 22, por lo que mi pregunta es, ¿cómo uso, por ejemplo, HttpResponse de la biblioteca de Apache, y no de Android SDK? El problema es que son lo mismo en ambos paquetes.

Pero, por ejemplo, HttpGet está bien, porque se llama HttpGetHC4 en Apache.

El método HttpClient estaba en desuso. Ahora puede usar URLConnection como puede ver en este ejemplo:

 private StringBuffer request(String urlString) { // TODO Auto-generated method stub StringBuffer chaine = new StringBuffer(""); try{ URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty("User-Agent", ""); connection.setRequestMethod("POST"); connection.setDoInput(true); connection.connect(); InputStream inputStream = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); String line = ""; while ((line = rd.readLine()) != null) { chaine.append(line); } } catch (IOException e) { // Writing exception to log e.printStackTrace(); } return chaine; } 

Espero que esto esté ayudando a alguien.

No hay nada malo con el uso de los módulos de Apache. Google acaba de hacer un gran lío, porque no pudieron hacer una bifurcación exitosa. La integración de Google y Apache fue supervisada por Jesse Wilson: trabajó en Google, lo estropeó todo y luego creó su propia biblioteca (OkHttp) durante el trabajo en la plaza. Esa es una historia realmente fea.

Recomiendo no usar el archivo JAR heredado porque contiene una versión anterior de las bibliotecas de Apache sin mejoras y correcciones de errores (es una instantánea pre-BETA muy antigua ). Como puede ver en la página oficial de los componentes de Apache, hay una nueva versión 4.4, compatible con todas las versiones de Android. Simplemente tenía que volver a empaquetarse en un espacio de nombres diferente para evitar colisiones con la versión anterior.

Simplemente puede agregar la dependencia de Maven (o descargar la versión de GitHub ):

 dependencies { compile "cz.msebera.android:httpclient:4.4.1.2" } 

Y luego reemplace org.apache.http con cz.msebera.android.httpclient , por lo que sus importaciones se verán así:

 import cz.msebera.android.httpclient.Header; import cz.msebera.android.httpclient.HttpHost; import cz.msebera.android.httpclient.HttpResponse; 

Sí, puedes continuar usando las librerías Apache sin perder horas de reescritura del código de trabajo.

En cuanto a la diferencia entre utilizar los componentes de Apache y HttpURLConnection, HttpURLConnection utiliza el caché de respuesta … Y eso es todo. No estoy seguro de que realmente lo desee y también siempre puede implementarlo usted mismo.

Por cierto, probé alternativas como HttpURLConnection, esas ni siquiera están cerca del poder y la simplicidad de Apache.

En Android Marshmallow (SDK 23), puede agregar:

useLibrary 'org.apache.http.legacy'

build.gradle en la sección de android {} como una solución alternativa. ¡Esto parece ser necesario para algunas de las bibliotecas de gms propias de Google!

Si yo fuera usted, no uso HttpClient porque:

El cliente Apache HTTP tiene menos errores en Eclair y Froyo. Es la mejor opción para estos lanzamientos.

Para Gingerbread y mejor, HttpURLConnection es la mejor opción.

Referencia

Use OKHttp o HttpUrlConnection . Y también recomiendo no usar la biblioteca Apache, porque puede no ser eficiente para Android.

Supongo que podría usar las bibliotecas Apache directamente en su proyecto, y no las que vienen con Android (puede obtener más control de esta manera, y comstackr con una versión anterior del SDK, si es necesario).

En su build.gradle , agregue esta línea:

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

Para evitar advertencias, agregue estas líneas también:

 android { -- YOUR EXISTING LINES -- packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } 

Agregue esto a las dependencias de su aplicación, y luego funcionará correctamente:

 dependencies { ... compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' } 

Si aún desea usar la biblioteca httpclient, debe agregar alguna descripción al archivo build.gradle. Y parece que el contenido agregado al archivo build.gradle está determinado por la versión del proyecto Android para Android.

si se apunta a API22 y anterior, entonces debería agregar la siguiente línea en build.gradle

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

si se apunta a API23 y posterior, entonces debería agregar la siguiente línea en build.gradle

 dependencies { compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1' } 

Aquí está el enlace de referencia

Use openConnection ().

La documentación de HttpClient sugiere eso.

Refiere esta respuesta.