android 与js交互的一些坑

    问题描述:根据以往的数据post方式上传的数据,后台收不到

    造成原因:后台有自己的请求方法,我们这边post请求上传的对象会覆盖他们的,导致他们所需的Cookie为null

    解决方法:我们先获得他们Cookie原本有的数据,再把我们要上传的数据加在Cookie里面,重新上传

    具体代码如下:

  

 mWebView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) { //  重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边

                if (url.startsWith("http:") || url.startsWith("https:")) {
                    view.loadUrl(url);
                    return false;
                }
                return true;

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                CookieManager cookieManager = CookieManager.getInstance();
                String CookieStr = cookieManager.getCookie(url);
                Log.e("sunzn", "Cookies = " + CookieStr);
                cookieManager.setAcceptCookie(true);
                cookieManager.setCookie(url, CookieStr);//cookies是在HttpClient中获得的cookie
                CookieSyncManager.getInstance().sync();

                //userToken=7c1b1620-43ef-4ba8-88f2-c38f8f3718d4; cityName=%E5%8C%97%E4%BA%AC%E5%B8%82; userToken=341a9f19-8367-4797-8aea-2740837619e4
                if (CookieStr != null) {
                    String strs[] = CookieStr.split("; ");
                    if (strs.length > 0) {

                        for (String str : strs) {
                            if (str.startsWith("userToken=")) {
                                userToken = str.substring("userToken=".length());
                                Log.e("sunzn", "userToken ==== " + userToken);

                            }
                        }
                    }

                }
                super.onPageFinished(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                view.getSettings().setJavaScriptEnabled(true);
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                Tools.dismissWaitDialog();
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
                WebResourceResponse response = super.shouldInterceptRequest(view, url);
                if (url != null && url.contains(INJECTION_TOKEN)) {
                    String assetPath = url.substring(url.indexOf(INJECTION_TOKEN) + INJECTION_TOKEN.length(), url.length());
                    try {
                        response = new WebResourceResponse(
                                "application/javascript",
                                "UTF8",
                                mWebView.getContext().getAssets().open(assetPath)
                        );
                    } catch (IOException e) {
                        e.printStackTrace(); // Failed to load asset file
                    }
                }
                return response;
            }
        });
    }
});


猜你喜欢

转载自blog.csdn.net/chengxiuhong1/article/details/52778010
今日推荐