Que cliente es mejor HttpURLConnection o HttpClient en android?

Estoy totalmente confundido que uno es mejor para llamar php webservice usando Restful Protocol.I hizo Usó tanto API (HttpClient y HttpURLConnection) para llamar a webservice.

Qué ocurre cuando se llama a un servicio web utilizando HttpClient

  • En Froyo su funcionamiento perfectamente (en localhost y servidor).
  • En JellyBean trabajando, pero después de un tiempo se ha ido, entonces no funciona
  • HttpClient está funcionando bien en localhost pero problema con la llamada werbservice en el servidor.

Qué ocurre cuando se llama a un servicio web mediante HttpURLConnection

  • En Froyo no funciona correctamente (en localhost)
  • El segundo punto es el mismo que el segundo punto de HttpClient
  • No puedo redirigir la página php webservice a otra página php.

Cuando llamo a webservice abc.php (en localhost y servidor) y desde aquí redirijo a otra página como xyz.php. Desde xyz.php realmente devolver datos al proyecto android en forma json, pero lo que sucede cuando uso HttpClient está funcionando bien, pero esta redirección no funciona con HttpURLConnection.

Código HttpClient

//calling the webservice using AsyncTask public String makeHttpReqToSrvr(String url,String requestType,List<NameValuePair> params) { HttpEntity httpEntity=null; HttpResponse httpResp = null; try { if (requestType == "GET") { //connection time out HttpParams httpParameters = new BasicHttpParams(); int timeout1 = 1000*8; int timeout2 = 1000*8; HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1); HttpConnectionParams.setSoTimeout(httpParameters, timeout2); HttpClient httpClient = new DefaultHttpClient(httpParameters); String paramString =URLEncodedUtils.format(params, "utf-8"); HttpGet httpGet = new HttpGet(url+"?"+paramString); httpResp = httpClient.execute(httpGet); httpEntity = httpResp.getEntity(); } if (requestType == "POST") { // connection time out HttpParams httpParameters = new BasicHttpParams(); int timeout1 = 1000*8; int timeout2 = 1000*8; HttpConnectionParams.setConnectionTimeout(httpParameters, timeout1); HttpConnectionParams.setSoTimeout(httpParameters, timeout2); HttpClient httpClient = new DefaultHttpClient(httpParameters); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); httpResp = httpClient.execute(httpPost); httpEntity = httpResp.getEntity(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // -- End and Start read the data using bufferreader try { if(httpEntity != null) json = EntityUtils.toString(httpEntity); json = strBuilder.toString(); Log.v("JSON", "data"+json); } catch (Exception e) { e.printStackTrace(); } return json; } 

Código de HttpURLConnection

 public String makeHttpReqToSrvr(String url,String requestType,List<NameValuePair> params) { try { URL urlPath= null; String paramString = URLEncodedUtils.format(params, "utf-8"); if (requestType == "GET") { urlPath = new URL(url+"?"+paramString); } if (requestType == "POST") { urlPath = new URL(url); } conn = (HttpURLConnection) urlPath.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setDoInput(true); conn.setDoOutput(true); if (requestType == "GET") { conn.setRequestMethod("GET"); } if (requestType == "POST") { conn.setRequestMethod("POST"); } //send the data to the server using post dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(paramString); dos.flush(); // Starts the query conn.connect(); int response = conn.getResponseCode(); is = conn.getInputStream(); // Convert the InputStream into a string json = readIt(is); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); dos.close(); conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return json; 

}
Por favor cualquier persona me sugiere si cualquier incorrecto con código antedicho y me dice la manera perfecta de llamar el webservice. Traté mucho, pero no lograr mi objetivo. Si usted no entiende por encima de la pregunta por favor pregúnteme.

El cliente HTTP de Apache tiene menos errores en Eclair y Froyo. Es la mejor opción para estos lanzamientos.

Google recomienda usar HttpURLConnection para aplicaciones dirigidas a Gingerbread y superior Antes de Froyo, HttpURLConnection tenía algunos errores frustrantes. Entonces qué pasa con Froyo. Mis aplicaciones funcionan en froyo y versoin más alto.

¿Qué cliente es mejor?

Cualquier ayuda será de gran utilidad. Gracias.

Puedes probar OKHTTP desde Square. Echa un vistazo a la página github aquí .

HttpUrlConnection no es bueno según lo dicho por el ingeniero de Google androide en las conferencias 2010 IO. Según ellos, esto crea un efecto adverso en la red. Ref: http://www.youtube.com/watch?v=xHXn3Kg2IQE

Utilice httpclient o Androidhttpclient

La mejor de las suertes

Obviamente, Google cambió de opinión .

HttpClient y AndroidHttpClient sólo deben utilizarse para FROYO y anteriores.

Comenzando con GINGERBREAD se recomienda utilizar HttpUrlConnection .

Seguí su recomendación y después de un tiempo muy corto de usar HUC (aka HttpUrlConnection) nativa, escribí una pequeña biblioteca (~ 12kb jar) que es mucho más fácil de usar.

La biblioteca se llama DavidWebb y allí puedes encontrar muchos enlaces a otras bibliotecas HTTP / REST especialmente para Android.

  • Uso de zxing Barcode Scanner dentro de una página web
  • Android - Javascript: cómo ejecutar jquery en webview
  • Android: Obtener la posición de desplazamiento de un WebView
  • Cargar HTML en la vista web en Android?
  • Referencia de activos de WebView de Android
  • La cookie de la webview de Android devuelve null
  • Cómo dividir Epub Html en páginas según el tamaño de la pantalla
  • Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2 (edición pequeña)
  • Llamar al servicio web WSDL mediante el uso de retrofit android
  • WebView de Android - Dithering / Cambios al tacto
  • WebView no se dibuja, WARN / webcore (5336): No se puede obtener la viewWidth después del primer diseño
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.