【问题标题】:Access the JSON response from webview of android从android的webview访问JSON响应
【发布时间】:2015-03-04 06:02:09
【问题描述】:

在 Android 上,我有一个 webView。我正在上面加载url。首先,我得到一个Facebook 的登录页面,在填写登录详细信息后,它在同一个webView 上给了我一个JSON Response

我正在使用此代码加载URL,但现在我不知道如何在string 中获取JSON Response,我完成了url

WebViewClient yourWebClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        wb.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
    }
};
wb = (WebView) findViewById(R.id.webview);
wb.getSettings().setJavaScriptEnabled(true);
wb.getSettings().setSupportZoom(true);
wb.getSettings().setBuiltInZoomControls(true);
wb.setWebViewClient(yourWebClient);
wb.loadUrl("http://pqrs.abcde.com/facebook");

JSON Response的格式为:

{"status":"success","msg":"You have successfully logged in."}

【问题讨论】:

    标签: java android json webview


    【解决方案1】:

    构建一个名为 MyJavaScriptInterface 的类。和 WebView 的 MyJavaScriptInterface。

        WebViewClient yourWebClient = new WebViewClient() {
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                wb.loadUrl("javascript:HtmlViewer.showHTML" +
                        "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
            }
        };
        wb = (WebView) findViewById(R.id.webview);
        wb.getSettings().setJavaScriptEnabled(true);
        wb.getSettings().setSupportZoom(true);
        wb.getSettings().setBuiltInZoomControls(true);
        wb.setWebViewClient(yourWebClient);
        wb.loadUrl("http://pqrs.abcde.com/facebook");
        wb.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");
    

        class MyJavaScriptInterface {
    
        private Context ctx;
        MyJavaScriptInterface(Context ctx) {
            this.ctx = ctx;      
        }
    
        @JavascriptInterface
        public void showHTML(String html) {
            System.out.println(html);
        }
    
    }
    

    注意:您需要从 wb.loadUrl("javascript:..."); 中删除窗口。 和“public void showHTML”之前的@JavascriptInterface。

    您可以从 html 参数中的 showHtml(..) 获取内容。

    【讨论】:

    • 你传递给构造函数的上下文在做什么?您正在命名一个类“JavaScriptInterface”,您可以更改该接口。
    • JSON 响应不来兄弟
    【解决方案2】:
        webView.setWebViewClient(new myWebClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(webdata);
    }
    
    public class myWebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
    
            view.loadUrl(url);
            return true;
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多