17

WebViewフォーム (投稿) を含む with html があります。送信ボタンをクリックすると、JSON 応答が返されます。

この JSON を取得するにはどうすればよいですか?

リクエストをインターセプトしないと、json が webview に表示されるので、使用する必要があると思いますshouldInterceptRequest(API 12 を使用しています) が、json を取得する方法がわかりません。

または、リクエストの代わりにレスポンスを傍受するなど、より良い方法があるでしょうか?

mWebView.loadUrl(myURL);  

isPageLoaded = false; // used because the url is the same for the response

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest (WebView view, String url) {

        if(isPageLoaded){
            // get the json
            return null;
        }
        else return super.shouldInterceptRequest(view, url);
    }

    public void onPageFinished(WebView view, String url) {
        isPageLoaded = true;
    }
});

ありがとう

4

3 に答える 3

11

shouldOverrideUrlLoading次のメソッドをオーバーライドする必要がありますWebViewClient

@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {

    if(flag) { 

            URL aURL = new URL(url); 
            URLConnection conn = aURL.openConnection(); 
            conn.connect(); 
            InputStream is = conn.getInputStream(); 
            // read inputstream to get the json..
            ...
            ...
            return true;
    }

    return false
}

@override
public void onPageFinished (WebView view, String url) {
    if (url contains "form.html") {
        flag = true;
    }
}

これも見てくださいWebViewからWebページのコンテンツを取得するにはどうすればよいですか?

于 2012-04-22T14:25:16.633 に答える
10

上記の方法がUIスレッドネットワーク接続について不平を言い始めたので、これをどのように達成したかを次に示します。

ChromeWebView Client とコンソール ログ出力を使用する

    public void OnSignUp_Click(View v) {
    WebView mWebview = new WebView(this);

    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript

    final Activity activity = this;

    mWebview.setWebChromeClient(new WebChromeClient() {
        public boolean onConsoleMessage(ConsoleMessage cmsg)
        {

                /* process JSON */
            cmsg.message();
            return true;

        }
    });

    mWebview.setWebViewClient(new WebViewClient() {

        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            Log.e("Load Signup page", description);
            Toast.makeText(
                    activity,
                    "Problem loading. Make sure internet connection is available.",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:console.log(document.body.getElementsByTagName('pre')[0].innerHTML);");
        }
    });

    mWebview.loadUrl("https://yourapp.com/json");

}

それが他の人に役立つことを願っています。

于 2014-01-17T07:08:06.350 に答える
-1

簡単に言うと、WebViewチュートリアルに示されているように、shouldOverrideUrlLoading(WebView view、String url)と非常によく似ています。

開始するには、以下のコードを参照してください。WebViewClientのshouldInterceptRequest(WebView view、String url)メソッドをオーバーライドするだけです。明らかに、それをインラインで行う必要はありませんが、コンパクトにするために、私が行ったことは次のとおりです。

これを見てください。

于 2012-04-18T16:23:25.327 に答える