org.apache.http.entity.FileEntity está en desuso en Android 6 (Marshmallow)

Resuelto Ambran asked hace 54 años • 3 respuestas

Estoy actualizando una aplicación a API 23, que org.apache.httpestá 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?

Ambran avatar Jan 01 '70 08:01 Ambran
Aceptado

Si cambia su compileSdkVersiona 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.

CommonsWare avatar Oct 05 '2015 14:10 CommonsWare

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 .

Vipul Asri avatar Oct 05 '2015 13:10 Vipul Asri