2012-02-21 99 views
7

我試圖使用HTTP Post連接到頁面。我做了一個http post創建 的web視圖。我需要重定向到webview中的另一個頁面。但是當繼續按鈕被點擊時,拋出異常。HTTP POST在WebView中的響應android

我的代碼是

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

    } 

同時單擊繼續按鈕,在web視圖拋出一個異常

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 

回答

7

使用這樣

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

在生成後數據字符串時使用'URLEncoder.encode(密碼,「UTF-8」)'。 – 2017-11-11 14:56:45

1

我不知道,如果這是你的失敗,或者這是否會導致一個錯誤,但是因爲你正在做一個POST,刪除「?」在URL_REGISTER變量的末尾。

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

「?」只有在執行GET請求時才需要。

大衛

+1

我刪除了 「?」 。在調用Http帖子後,第一個成功加載的URL,將從「https://www.paypal.com/checkout」頁面重定向到https://www.paypal.com/conformation的setFormData異常拋出失敗 – jennifer 2012-02-21 06:51:26