HTTP POST响应到的WebView在安卓 [英] HTTP POST response into WebView in android

查看:205
本文介绍了HTTP POST响应到的WebView在安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用HTTP连接到页面 帖子。我做一个HTTP POST创建 一个web视图。我需要重定向到从web视图另一个页面。但是,在单击继续按钮时异常。

我的code是

 公共类ZHttpPostProjActivity延伸活动{
    / **第一次创建活动时调用。 * /

    私人的WebView mWebView;
    私人ProgressDialog进度;
    私有静态最后字符串变量=ZHttpPostProjActivity;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.web_view);

    mWebView =(web视图)findViewById(R.id.webview);
    WebSettings webSettings = mWebView.getSettings();

    webSettings.setJavaScriptEnabled(真正的);
    webSettings.setDomStorageEnabled(真正的);

    进度= ProgressDialog.show(ZHttpPostProjActivity.this,,
        载入中...);

    POSTDATA();
    }


    私人最终字符串URL_REGISTER =htt​​ps://www.paypal.com/checkout;

    公共无效POSTDATA(){

    BufferedReader中的BufferedReader = NULL;

    尝试 {
        名单<的NameValuePair> namevaluepairs中=新的ArrayList<的NameValuePair>();
        nameValuePairs.add(新BasicNameValuePair(用户名,用户名));
        nameValuePairs.add(新BasicNameValuePair(密码,密码));

        HttpClient的HttpClient的=新DefaultHttpClient();
        HttpPost httppost =新HttpPost(URL_REGISTER);
        httppost.setEntity(新UrlEn codedFormEntity(namevaluepairs中,
            HTTP.UTF_8));

        HTT presponse响应= httpclient.execute(httppost);

        的BufferedReader =新的BufferedReader(新的InputStreamReader(响应
            。.getEntity()的getContent()));
        StringBuffer的StringBuffer的=新的StringBuffer();
        串线=;
        串LineSeparator = System.getProperty(line.separator);
        而((行= bufferedReader.readLine())!= NULL){
        的StringBuffer.append(行+ LineSeparator);
        }
        bufferedReader.close();

        字符串WEBDATA = stringBuffer.toString();
        Log.i(TAG +网络数据,WEBDATA);

        //字符串WEBDATA =新
        // BasicResponseHandler()用handleResponse(响应)。

        Log.i(TAG,Httppost.getURI()的toString()。
            + httppost.getURI()的toString())。

        mWebView.setWebViewClient(新WebViewClient(){
        公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
            Log.i(TAG,处理的WebView URL点击......);
            view.loadUrl(URL);
            返回true;
        }

        公共无效onPageFinished(web视图查看,字符串URL){

            Log.i(TAG,加载完成URL:+网址);
            如果(progressBar.isShowing()){
            progressBar.dismiss();
            }
        }

        公共无效onReceivedError(web视图来看,INT错误code,
            字符串描述,字符串failingUrl){
            Log.e(TAG,错误:+说明书+\ n错误code:
                +错误code +\ñ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);

    }赶上(例外前){
        ex.printStackTrace();
    }

    }
 

同时点击继续抛出一个异常web视图按钮

  11月2日至21日:42:38.539:E / webviewdatabase(2848):无法在setFormData
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):java.net.MalformedURLException:未知协议:约
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在java.net.URL中的< INIT>(URL.java:288)。
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在java.net.URL中的< INIT>(URL.java:157)。
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.WebViewDatabase.setFormData(WebViewDatabase.java:1032)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.BrowserFrame.loadStarted(BrowserFrame.java:384)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.JWebCoreJavaBridge.sharedTimerFired(本机方法)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.JWebCoreJavaBridge.fireSharedTimer(JWebCoreJavaBridge.java:91)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:108)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.os.Handler.dispatchMessage(Handler.java:99)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.os.Looper.loop(Looper.java:123)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在android.webkit.WebViewCore $ WebCoreThread.run(WebViewCore.java:673)
一十一月2日至21日:42:38.539:E / webviewdatabase(2848):在java.lang.Thread.run(Thread.java:1019)
一十一月2日至21日:42:41.324:E /缓存(2848):非法到期:星期六,2000年1月1日一点01分01秒格林尼治标准​​时间
 

解决方案

使用这样

 的WebView的WebView =新的WebView(本);
的setContentView(web视图);
byte []的帖子= EncodingUtils.getBytes(postvariable =值放大器; nextvar =值2,BASE64);
webview.postUrl(http://www.geenie.nl/AnHeli/mobile/ranking/demo/index.php,后);
 

I'm attempting to connect to the page using an HTTP Post. I do an http post for creating a webview. i need to redirect to another page from the webview. But when the continue button is clicked exception is thrown .

My code is

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

    }

While Clicking the continue button in the webview an exception is thrown

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

解决方案

Use like this

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

这篇关于HTTP POST响应到的WebView在安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆