org.apache.http.entity.FileEntity está en desuso en Android 6 (Marshmallow)
Estoy actualizando una aplicación a API 23, que org.apache.http
está en desuso.
Mi código actual (obsoleto) 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());
Encontré algunas sugerencias sobre cómo se debe hacer 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 y más corta para eso?
Si cambia su compileSdkVersion
a 21, su aplicación se compilará limpiamente. Dicho esto, hay razones por las que Google se está alejando de la implementación integrada de HttpClient, por lo que probablemente debería buscar alguna otra biblioteca. Esa "alguna otra biblioteca" podría ser:
- el Java clásico incorporado
HttpUrlConnection
, aunque como habrás descubierto, su API deja mucho que desear - Paquete independiente de Apache de HttpClient para Android
- OkHttp (mi recomendación)
- AndroidAsync
En particular, OkHttp parece tener una API bastante buena para publicar un archivo y publicar un formulario de varias partes , que debería ser similar a lo que hace su código HttpClient.
La versión Apache HttpClient 4.3 para Android tenía como objetivo remediar la situación proporcionando versiones oficiales compatibles con Google Android.
Dado que a partir de la API 23 de Android, se eliminó la bifurcación de HttpClient de Google, este proyecto se suspendió.
Se recomienda a aquellos usuarios que quieran seguir usando Apache HttpClient en Android que consideren
Puerto Apache HttpClient 4.3 para Android cuando se apunta a Android API 22 y 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 posteriores
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 utilizar useLibrary 'org.apache.http.legacy'
la declaración, que se introdujo para proyectos que no migraron desde las clases HttpClient proporcionadas por Android. Para mayor explicación .