在Android中的WebView的HTTP POST响应

我正尝试使用HTTP Post连接到该页面。 我做了一个http post创build一个webview。 我需要从webviewredirect到另一个页面。 但是当继续button被点击时,exception被抛出。

我的代码是

public class ZHttpPostProjActivity extends Activity { /** Called when the activity is first created. */ private WebView mWebView; private ProgressDialog progressBar; private static final String TAG = "ZHttpPostProjActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web_view); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); progressBar = ProgressDialog.show(ZHttpPostProjActivity.this, "", "Loading..."); postData(); } private final String URL_REGISTER = "https://www.paypal.com/checkout"; public void postData() { BufferedReader bufferedReader = null; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("username", "username")); nameValuePairs.add(new BasicNameValuePair("password", "password")); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_REGISTER); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); HttpResponse response = httpclient.execute(httppost); bufferedReader = new BufferedReader(new InputStreamReader(response .getEntity().getContent())); StringBuffer stringBuffer = new StringBuffer(""); String line = ""; String LineSeparator = System.getProperty("line.separator"); while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line + LineSeparator); } bufferedReader.close(); String webData = stringBuffer.toString(); Log.i(TAG + "web data : ", webData); // String webData = new // BasicResponseHandler().handleResponse(response); Log.i(TAG, "Httppost.getURI().toString(): " + httppost.getURI().toString()); mWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.i(TAG, "Processing webview url click..."); view.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { Log.i(TAG, "Finished loading URL: " + url); if (progressBar.isShowing()) { progressBar.dismiss(); } } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.e(TAG, "Error: " + description + " \n errorCode: " + errorCode + "\n failingUrl: " + failingUrl); } }); // mWebView.loadUrl(httppost.getURI().toString()); mWebView.loadData(webData, "text/html", "UTF-8"); mWebView.loadDataWithBaseURL(httppost.getURI().toString(), webData, "text/html", HTTP.UTF_8, null); } catch (Exception ex) { ex.printStackTrace(); } } 

点击webview中的继续button时会抛出exception

 02-21 11:42:38.539: E/webviewdatabase(2848): Failed in setFormData 02-21 11:42:38.539: E/webviewdatabase(2848): java.net.MalformedURLException: Unknown protocol: about 02-21 11:42:38.539: E/webviewdatabase(2848): at java.net.URL.<init>(URL.java:288) 02-21 11:42:38.539: E/webviewdatabase(2848): at java.net.URL.<init>(URL.java:157) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.WebViewDatabase.setFormData(WebViewDatabase.java:1032) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.BrowserFrame.loadStarted(BrowserFrame.java:384) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.sharedTimerFired(Native Method) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.fireSharedTimer(JWebCoreJavaBridge.java:91) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:108) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.os.Handler.dispatchMessage(Handler.java:99) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.os.Looper.loop(Looper.java:123) 02-21 11:42:38.539: E/webviewdatabase(2848): at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:673) 02-21 11:42:38.539: E/webviewdatabase(2848): at java.lang.Thread.run(Thread.java:1019) 02-21 11:42:41.324: E/cache(2848): illegal expires: Sat, Jan 01 2000 01:01:01 GMT 

Solutions Collecting From Web of "在Android中的WebView的HTTP POST响应"

像这样使用

 WebView webview = new WebView(this); setContentView(webview); byte[] post = EncodingUtils.getBytes("postvariable=value&nextvar=value2", "BASE64"); webview.postUrl("http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php", post); 

我不确定这是否是你的失败,或者如果这会导致一个错误,但是因为你正在做一个POST,删除“?” 在URL_REGISTERvariables的末尾。

 private final String URL_REGISTER = "https://www.paypal.com/checkout?"; 

“?” 只有在执行GET请求时才需要。

大卫