Android Webview POST

J’essaie d’accomplir quelque chose d’assez simple, mais je n’ai trouvé aucune documentation valable à ce sujet. J’ai une webView et je dois y charger une page qui nécessite des données POST. Semble comme un processus simple, mais je ne peux pas trouver un moyen d’afficher le résultat dans une webView.

Le processus devrait être simple:

query (avec données POST) -> serveur web -> réponse HTML -> WebView.

Je peux soumettre des données en utilisant un DefaultHttpClient, mais cela ne peut pas être affiché dans une WebView.

Aucune suggestion?

Merci beaucoup

Solution

private static final Ssortingng 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); Ssortingng data = new BasicResponseHandler().handleResponse(response); mWebView.loadData(data, "text/html", "utf-8"); } 

Essaye ça:

 private static final Ssortingng 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); } 

Je recommanderais de le faire dans le cadre d’un AsyncTask et de mettre à jour WebView par la suite

Deux manières de charger la réponse à la publication dans la vue Web:

  1. webview.loadData() : Comme ce que vous avez publié dans votre solution. Mais “le contenu chargé via ce mécanisme n’a pas la capacité de charger le contenu du réseau”.

  2. webview.postUrl() : utilisez cette webview.postUrl() si la post-réponse doit charger le contenu du réseau. (NOTE: accessible uniquement depuis le niveau api 5, ce qui signifie aucun Android 1.6 ou inférieur)


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

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

J’utilise webView.loadData () pour faire le post client et il affichera le contenu de l’url, mon code:

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

utilisez la fonction 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 vous utilisez un WebView depuis le début, est-ce que cela pourrait fonctionner?

Une Webview avec un HTML / js qui fait le POST et affiche naturellement le résultat.