Android Webview POST

Estoy tratando de lograr algo bastante simple, pero no he encontrado una buena documentación sobre esto. Tengo una vista web, y necesito cargar una página que requiera datos POST. Parece un proceso simple, pero no puedo encontrar una manera de mostrar el resultado en una vista web.

El proceso debe ser simple:

consulta (con datos POST) -> servidor web -> respuesta HTML -> WebView.

Puedo enviar datos usando un DefaultHttpClient, pero esto no se puede mostrar en un WebView.

¿Alguna sugerencia?

Muchas gracias

Solución

private static final String URL_STRING = "http://www.yoursite.com/postreceiver"; public void postData() throws IOException, ClientProtocolException { List nameValuePairs = new ArrayList(); nameValuePairs.add(new BasicNameValuePair("foo", "12345")); nameValuePairs.add(new BasicNameValuePair("bar", "23456")); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_STRING); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); String data = new BasicResponseHandler().handleResponse(response); mWebView.loadData(data, "text/html", "utf-8"); } 

Prueba esto:

 private static final String URL_STRING = "http://www.yoursite.com/postreceiver"; public void postData() throws IOException, ClientProtocolException { List nameValuePairs = new ArrayList(); nameValuePairs.add(new BasicNameValuePair("foo", "12345")); nameValuePairs.add(new BasicNameValuePair("bar", "23456")); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_STRING); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); } 

Recomendaría hacer esto como parte de una AsyncTask y actualizar la WebView luego

Dos formas de cargar la respuesta de la publicación en la vista web:

  1. webview.loadData() : me gusta lo que ha publicado en su solución. Pero “el contenido cargado a través de este mecanismo no tiene la capacidad de cargar contenido de la red”.

  2. webview.postUrl() : Úselo si la respuesta de la publicación necesita cargar contenido de la red. (NOTA: solo se puede acceder desde api-level 5, lo que significa que no hay Android 1.6 o inferior)


 String postData = "username=my_username&password=my_password"; webview.postUrl(url,EncodingUtils.getBytes(postData, "BASE64")); 

(fuente: http://www.anddev.org/other-coding-problems-f5/webview-posturl-postdata-t14239.html )

Yo uso webView.loadData () para hacer la publicación del cliente, y se mostrará el contenido de la url, mi código:

 public static void webview_ClientPost(WebView webView, String url, Collection< Map.Entry> postData){ StringBuilder sb = new StringBuilder(); sb.append(""); sb.append(""); sb.append(String.format("
", url, "post")); for (Map.Entry item : postData) { sb.append(String.format("", item.getKey(), item.getValue())); } sb.append("
"); webView.loadData(sb.toString(), "text/html", "UTF-8"); }

use la función webview_ClientPost ():

 Map mapParams = new HashMap(); mapParams.put("param1", "111"); mapParams.put("param2", "222"); Collection> postData = mapParams.entrySet(); webview_ClientPost(webView1, "http://www.yoursite.com/postreceiver", postData); 

Si usa un WebView desde el principio, ¿podría funcionar?

Una vista web con html / js que hace el POST y, naturalmente, muestra el resultado.