Android Webview POST
我正在努力完成一些非常简单的事情,但是我没有find关于这方面的很好的文档。 我有一个webView,我需要加载一个页面,它需要POST数据。 看起来像一个简单的过程,但我找不到一个方法来显示在一个webView的结果。
这个过程应该很简单:
查询(带有POST数据) – > webserver – > HTML响应 – > WebView。
我可以使用DefaultHttpClient提交数据,但不能在WebView中显示。
有什么build议么?
非常感谢
解
private static final String URL_STRING = "http://www.yoursite.com/postreceiver"; public void postData() throws IOException, ClientProtocolException { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 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"); }
尝试这个:
private static final String URL_STRING = "http://www.yoursite.com/postreceiver"; public void postData() throws IOException, ClientProtocolException { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 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); }
我会build议做这个作为一个AsyncTask的一部分,并更新后的WebView
在webview中加载post响应的两种方法:
-
webview.loadData()
:就像你在解决scheme中发布的一样。 但是“通过这种机制加载的内容不具备从networking加载内容的能力”。 -
webview.postUrl()
:如果后期响应需要从networking加载内容,请使用此方法。 (注:只能从API级别5,这意味着没有Android 1.6或更低)
String postData = "username=my_username&password=my_password"; webview.postUrl(url,EncodingUtils.getBytes(postData, "BASE64"));
(来源: http : //www.anddev.org/other-coding-problems-f5/webview-posturl-postdata-t14239.html )
我使用webView.loadData()做客户端的post,它会显示url的内容,我的代码:
public static void webview_ClientPost(WebView webView, String url, Collection< Map.Entry<String, String>> postData){ StringBuilder sb = new StringBuilder(); sb.append("<html><head></head>"); sb.append("<body onload='form1.submit()'>"); sb.append(String.format("<form id='form1' action='%s' method='%s'>", url, "post")); for (Map.Entry<String, String> item : postData) { sb.append(String.format("<input name='%s' type='hidden' value='%s' />", item.getKey(), item.getValue())); } sb.append("</form></body></html>"); webView.loadData(sb.toString(), "text/html", "UTF-8"); }
使用函数webview_ClientPost():
Map<String, String> mapParams = new HashMap<String, String>(); mapParams.put("param1", "111"); mapParams.put("param2", "222"); Collection<Map.Entry<String, String>> postData = mapParams.entrySet(); webview_ClientPost(webView1, "http://www.yoursite.com/postreceiver", postData);
如果从一开始就使用WebView,它可以工作吗?
一个带有html / js的Web视图,它会自动显示结果。