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
- Android WebView eliminarCookie
- WebViewClient shouldInterceptRequest Congela el WebView
- Android: Transparente WebView sobre previsualización de cámara
- Ampliar / reducir en webview android
- Android: ZoomPicker se rompe enTouchListener
- 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.
- Mostrar una ubicación geográfica mediante webview
- Error en Callin Java webservice de Android usando k-Soap
- Depurar HTTPS peticiones / respuestas con Fiddler en Android Phone don `t trabajo
- Rendimiento JPG vs WebP en Android
- Pestaña servidores no visible en eclipse v3.7.2
- Detectar clic en el botón HTML a través de javascript en Android WebView
- Retener completamente WebView en fragmento tras rotación
- WebViews en ViewPager no se cargan / representan hasta que se muestra la página
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.
- Cómo ver un Google Calendar público a través de una aplicación para Android
- ¿Por qué los estilos de corte personalizado aparecen en gris en lugar del color especificado?