Org.apache.http.entity.FileEntity está obsoleto en Android 6 (Marshmallow)

Estoy actualizando una aplicación a la API 23 donde org.apache.http está obsoleto.

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()); 

He encontrado algunas sugerencias de cómo esto debe hacerse utilizando HttpURLConnection , pero son todos mucho más compleja que la solución actual (que ya no se puede utilizar). Estoy hablando de muchas líneas de código para ejecutar la misma funcionalidad que la anterior.

Los ejemplos son: esta página y esta página

¿Alguien tiene una buena sólida solución más corta para eso?

Si cambia su compileSdkVersion a 21, su aplicación se compilará de forma limpia. Dicho esto, hay razones por las que Google se está alejando de la implementación HttpClient incorporada, por lo que probablemente debería buscar alguna otra biblioteca. Esa "otra biblioteca" podría ser:

  • El clásico Java HttpUrlConnection , aunque como usted ha encontrado, su API deja algo que desear
  • Empaquetado independiente de Apache de HttpClient para Android
  • OkHttp (mi recomendación)
  • AndroidAsync

En particular, OkHttp parece tener una muy buena API para publicar un archivo y publicar un formulario de varias partes , que debe ser similar a lo que está haciendo su código HttpClient.

Apache HttpClient 4.3 puerto para Android tenía la intención de remediar la situación, proporcionando lanzamientos oficiales compatibles con Google Android.

Dado que a partir de la API de Android 23 Google fork de HttpClient se ha eliminado este proyecto se ha descontinuado.

Aquellos usuarios que deseen continuar utilizando Apache HttpClient en Android se les aconseja considerar

Puerto Apache HttpClient 4.3 para Android al orientar la API de Android 22 y versiones anteriores

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

Paquetes de Apache HttpClient para Android mantenidos por Marek Sebera al orientar la API de Android 23 y versiones 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 la useLibrary 'org.apache.http.legacy' , que se introdujo para proyectos que no migraron de las clases HttpClient proporcionadas por Android. Para más explicaciones .

El mejor reemplazo para HTTPClient es usar Volley. Es mucho más fácil de usar, maneja colas de solicitudes y cachés que usted solicita. Es totalmente compatible con casi todos los niveles API hasta API 4.

Consulte la documentación de Android sobre cómo hacerlo.

  • Cómo probar la actualización de la base de datos sqlite antes de cargar la nueva versión de mi aplicación en la tienda de juegos en android
  • ¿Por qué no funciona "System.out.println" en Android?
  • Fondo transparente en ImageButton con efecto de ondulación?
  • OpenGL de Android: IllegalArgumentException utiliza buffer de orden nativo directo
  • Diseño de fragmentos: ¿Cómo adaptarse a múltiples diseños de pantalla mostrando / ocultando fragmentos dentro de una sola actividad?
  • ¿Cómo puedo usar retrofit library con la barra de progreso?
  • Utilizar un Cursor devuelto desde un LoaderManager en un AsyncTask
  • Uso de la clase GLSurfaceView con diseños xml para Android
  • Cómo agregar el recyclerview al proyecto
  • Java.lang.UnsatisfiedLinkError: Método nativo no encontrado: Error en jni ()
  • Pixel Perfect Collision detection entre una vista personalizada y un ImageView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.