Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the JSON response of a POST request in a WebView?

I've got a WebView with html containing a form (post). When clicking some submit button I get a JSON response.

How can I get this JSON?

If I don't intercept the request the json is displayed on the webview, so I guess I should use shouldInterceptRequest (I'm using API 12), but I don't know how to get the json in it.

Or maybe there's a better way, like intercepting the response instead of the request?

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

Thanks

like image 257
jul Avatar asked Apr 18 '12 16:04

jul


1 Answers

You should override the shouldOverrideUrlLoading method of 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;
    }
}

Also take a look at this How do I get the web page contents from a WebView?

like image 160
Ronnie Avatar answered Sep 28 '22 20:09

Ronnie