Cómo cambiar de HttpClient a HttpUrlConnection

Estoy creando una aplicación de androide y envío datos de la aplicación androide a servlet a través de HttpClient.I uso HttpPost método. He leído en el sitio de desarrollo de Android que apache HttpClient biblioteca tiene algún error en Android Froyo 2.2 y después de su buena práctica para utilizar HttpUrlConnection en lugar de HttpPost. Así que quiero convertir mi código HttpPost a HttpUrlConnectio pero no sé cómo. Así que por favor ayúdame Estoy publicando mi código android, así como el código de servlet aquí

Código de Android

private String postData(String valueIWantToSend[]) { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("param1",valueIWantToSend[0])); nameValuePairs.add(new BasicNameValuePair("param2", valueIWantToSend[1])); nameValuePairs.add(new BasicNameValuePair("param3", valueIWantToSend[2])); nameValuePairs.add(new BasicNameValuePair("param4", valueIWantToSend[3])); nameValuePairs.add(new BasicNameValuePair("param5", valueIWantToSend[4])); nameValuePairs.add(new BasicNameValuePair("param6", valueIWantToSend[5])); nameValuePairs.add(new BasicNameValuePair("param7", valueIWantToSend[6])); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); /* execute */ HttpResponse response = httpclient.execute(httppost); HttpEntity rp = response.getEntity(); //origresponseText=readContent(response); } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } return null; } 

Y aquí está mi código de servlet

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html"); ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream()); Enumeration paramNames = request.getParameterNames(); String params[] = new String[7]; int i=0; while(paramNames.hasMoreElements()) { String paramName = (String) paramNames.nextElement(); System.out.println(paramName); String[] paramValues = request.getParameterValues(paramName); params[i] = paramValues[0]; System.out.println(params[i]); i++; } } 

Usted debe absolutamente estar usando HttpUrlConnection :

Para Gingerbread y mejor, HttpURLConnection es la mejor opción … Las nuevas aplicaciones deben utilizar HttpURLConnection …

– Google (alrededor de 2011)

Sin embargo, no hay manera fácil de "cambiar". Las API son totalmente diferentes. Vas a tener que reescribir tu código de red. Hay ejemplos perfectos en la documentación sobre cómo enviar solicitudes GET y POST, así como en las aplicaciones de ejemplo de SDK.

Cuando leí la ya mencionada publicación de Google sobre las mejores prácticas de hacer solicitudes HTTP en versiones más recientes de Android, pensé que alguien estaba bromeando. HttpURLConnection es realmente una pesadilla para el uso, en comparación con casi cualquier otra forma de comunicarse con servidores HTTP (aparte de la comunicación directa Socket).

No encontré una biblioteca realmente delgada para Android para hacer el trabajo pesado, así que escribí la mía. Puedes encontrarlo en DavidWebb incluyendo una lista de bibliotecas alternativas que encontré (desafortunadamente) después de desarrollar la biblioteca.

Su código se vería más o menos así:

 public void testPostToUrl() throws Exception { String[] values = new String[3]; Webb webb = Webb.create(); Response<String> response = webb .post("http://www.example.com/abc.php") .param("param1", values[0]) .param("param2", values[1]) .param("param3", values[2]) .asString(); assertEquals(200, response.getStatusCode()); assertNotNull(response.getBody()); assertTrue(response.getBody().contains("my expected result")); } public void testPostToUrlShorter() throws Exception { String[] values = new String[3]; Webb webb = Webb.create(); String result = webb .post("http://www.example.com/abc.php") .param("param1", values[0]) .param("param2", values[1]) .param("param3", values[2]) .ensureSuccess() .asString() .getBody(); assertTrue(result.contains("my expected result")); } 

No tienes que cambiar, puedes seguir usando la biblioteca de apache como he descrito en esta respuesta. Realmente no hay desventajas para seguir utilizando la biblioteca de apache – es sólo el marketing de google.

  • (httplog) -static: issbsettingenabled false android
  • Tener un error mySQL, columna desconocida where clause
  • Codificación de caracteres por defecto Jersey / Rest
  • Mantenimiento de la sesión HTTP al acceder a un servlet desde Android
  • Enviar arraylist de servlet a la aplicación de Android
  • ¿Cómo puedo verificar los datos firmados que vienen para la aplicación de facturación de Android Market utilizando Java (Servlet)
  • Cómo enviar un archivo de audio de un cliente android a un servidor servlet
  • Archivo de Java subiendo dolorosamente lento
  • GCM enviar imagen en lugar de mensaje
  • ¿Cómo puedo enviar un campo de texto en la solicitud POST que carga un blob en Blobstore y lo recupero en el controlador de carga del blob?
  • Qué es stringentity en android y su uso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.