java - org - http apache android
org.apache.http.entity.FileEntity está en desuso en Android 6(Marshmallow) (3)
El puerto Apache HttpClient 4.3 para Android tenía la intención de remediar la situación al proporcionar versiones oficiales compatibles con Google Android.
Dado que a partir de Android API 23, la bifurcación de HttpClient de Google se ha eliminado, este proyecto se ha suspendido.
Se recomienda a aquellos usuarios que quieran continuar usando Apache HttpClient en Android que consideren
Puerto Apache HttpClient 4.3 para Android cuando se dirige a Android API 22 y versiones anteriores
dependencies {
compile group: ''org.apache.httpcomponents'' , name: ''httpclient-android'' , version: ''4.3.5.1''
}
Paquetes Apache HttpClient para Android mantenidos por Marek Sebera cuando apuntan a Android API 23 y más reciente
dependencies {
compile group: ''cz.msebera.android'' , name: ''httpclient'', version: ''4.4.1.1''
}
tomado del sitio web oficial de Apache : Apache HttpClient para Android
NOTA:
No es necesario que use la
useLibrary ''org.apache.http.legacy''
, que se introdujo para proyectos que no migraron desde Android, proporcionaron clases HttpClient.
Para más
explanation
.
Estoy actualizando una aplicación a API 23 donde
org.apache.http
está en desuso.
Mi código actual (en desuso) se ve así:
HttpClient httpClient = new DefaultHttpClient();
File file = new File(attr.Value);
String url = server_url;
HttpPost request = new HttpPost(url);
FileEntity fileEntity = new FileEntity(file, "image/png");
request.setEntity(fileEntity);
HttpResponse response = httpClient.execute(request);
String output = getContent(response.getEntity().getContent());
He encontrado algunas sugerencias sobre cómo debería hacerse esto usando
HttpURLConnection
, pero todas son mucho más complejas que la solución actual (que ya no se puede usar).
Estoy hablando de muchas líneas de código para ejecutar la misma funcionalidad que la anterior.
Ejemplos son: esta página y esta página
¿Alguien tiene una buena solución sólida más corta para eso?
El mejor reemplazo para HTTPClient es usar Volley. Es mucho más fácil de usar, maneja las colas de solicitud y almacena en caché sus solicitudes. Es totalmente compatible con casi todos los niveles de API hasta API 4.
Consulte la documentación de Android sobre cómo hacerlo.
Si cambia su
compileSdkVersion
a 21, su aplicación se compilará limpiamente.
Dicho esto, hay razones por las que Google está retrocediendo de la implementación integrada de HttpClient, por lo que probablemente debería buscar alguna otra biblioteca.
Esa "otra biblioteca" podría ser:
-
el clásico Java
HttpUrlConnection
, aunque, como has encontrado, su API deja algo que desear - El paquete independiente de Apache de HttpClient para Android
- OkHttp (mi recomendación)
- AndroidAsync
En particular, OkHttp parece tener una API bastante buena para github.com/square/okhttp/wiki/Recipes#posting-a-file y github.com/square/okhttp/wiki/… , que debería ser similar a lo que está haciendo su código HttpClient.