org - Módulo apache obsoleto de Android(HttpClient, HttpResponse, etc.)
httpclient-android example (8)
Android ha desaprobado el módulo Apache desde el nivel 22 de API, por lo que mi pregunta es, ¿cómo uso, por ejemplo,
HttpResponse
de la biblioteca Apache, no del SDK de Android?
El problema es que son iguales en ambos paquetes.
Pero, por ejemplo,
HttpGet
está bien, porque se llama
HttpGetHC4
en Apache.
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''
}
El método HttpClient fue obsoleto. Ahora puede usar la 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.
En Android Marshmallow (sdk 23), puede agregar:
useLibrary ''org.apache.http.legacy''
para construir.gradle en la sección de
android {}
como solución alternativa.
¡Esto parece ser necesario para algunas de las bibliotecas gms de Google!
No hay nada malo en usar 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, estropeó todo y luego creó su propia biblioteca (OkHttp) durante el trabajo en plaza. Esa es una historia realmente fea.
Aconsejo no utilizar el archivo JAR heredado porque contiene una versión antigua de las bibliotecas de Apache sin mejoras ni correcciones de errores (es una instantánea anterior a BETA muy antigua ). Como puede ver en la página oficial de componentes de Apache, hay una nueva versión 4.4, compatible con todas las versiones de Android. Solo tenía que volverse a empaquetar bajo un espacio de nombres diferente para evitar la colisión 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
, para que sus importaciones se vean así:
import cz.msebera.android.httpclient.Header;
import cz.msebera.android.httpclient.HttpHost;
import cz.msebera.android.httpclient.HttpResponse;
¡Sí, puede continuar usando las bibliotecas de Apache sin perder horas reescribiendo el código de trabajo!
En cuanto a la diferencia entre usar componentes Apache y HttpURLConnection, HttpURLConnection usa el almacenamiento en caché de respuesta ... Y eso es todo. No estoy seguro de que realmente lo quieras y también puedes implementarlo tú mismo.
Por cierto, probé alternativas como HttpURLConnection, que ni siquiera están cerca del poder y la simplicidad de Apache.
Si aún desea utilizar 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 compilación del proyecto de Android de destino.
si está dirigido a API22 y versiones anteriores, 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 está dirigido a API23 y posterior, 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
Si yo fuera usted, no uso
HttpClient
porque:
El cliente HTTP Apache tiene menos errores en Eclair y Froyo. Es la mejor opción para estos lanzamientos.
Para Gingerbread y mejores, HttpURLConnection es la mejor opción.
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 de Apache directamente en su proyecto, y no las que se incluyen con Android (puede obtener más control de esta manera y compilar con una versión anterior de 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 también estas líneas:
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''
}
}