2012-02-21 32 views
7

Tôi đang cố kết nối với trang bằng cách sử dụng HTTP Bài đăng. Tôi làm một bài đăng http để tạo một chế độ xem web. tôi cần chuyển hướng đến một trang khác từ chế độ xem web. Nhưng khi nút tiếp tục được nhấn ngoại lệ được ném.Phản hồi HTTP POST vào WebView trong android

Mã của tôi là

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

    } 

Trong khi Nhấp vào nút tiếp tục trong webview một ngoại lệ được ném

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 

Trả lời

7

Sử dụng như thế này

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

Đã sử dụng 'URLEncoder.encode (mật khẩu," UTF-8 ")' trong khi tạo chuỗi dữ liệu bài đăng. –

1

Tôi không chắc chắn nếu đây là nơi mà thất bại của bạn, hoặc nếu điều này sẽ gây ra một lỗi, nhưng kể từ khi bạn đang làm một POST, loại bỏ các "?" ở cuối biến URL_REGISTER của bạn.

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

"?" chỉ cần khi thực hiện yêu cầu GET.

David

+1

Tôi đã gỡ bỏ biểu tượng "?" . Sau khi gọi bài đăng Http, URL đầu tiên được tải thành công, chuyển hướng từ trang "https://www.paypal.com/checkout" tới https://www.paypal.com/conformation là ném Không thành công trong setFormData ngoại lệ – jennifer

Các vấn đề liên quan