web-dev-qa-db-ja.com

Android Webview POST

私は非常に簡単なことを達成しようとしていますが、これに関する良いドキュメントは見つかりませんでした。 webViewがあり、その中にPOST data。を必要とするページをロードする必要があります。単純なプロセスのようですが、webViewで結果を表示する方法を見つけることができません。

プロセスは単純でなければなりません:

query(with POST data)-> webserver-> HTML response-> WebView。

DefaultHttpClientを使用してデータを送信できますが、これをWebViewに表示することはできません。

助言がありますか?

どうもありがとう

解決

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);  

}

AsyncTaskの一部としてこれを行い、後でWebViewを更新することをお勧めします

15
TJF

WebViewで投稿応答をロードする2つの方法:

  1. webview.loadData():ソリューションに投稿した内容に似ています。しかし、「このメカニズムを介してロードされたコンテンツには、ネットワークからコンテンツをロードする機能がありません」。

  2. webview.postUrl():ポストレスポンスがネットワークからコンテンツをロードする必要がある場合、これを使用します。 (注: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

143
tarkeshwar

私はwebView.loadData()を使用してクライアントの投稿を行い、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);
11
HenryChuang

最初からWebViewを使用すると、動作しますか?

POSTを実行し、結果を自然に表示するhtml/jsを持つWebview。

2
LatinSuD