我的h WebView
包含一个包含表单的帖子(帖子)。单击某个提交按钮时,我会收到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;
}
});
由于
答案 0 :(得分:8)
您应该覆盖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;
}
}
答案 1 :(得分:7)
这是我如何实现这一点,因为提到的方法开始抱怨UI线程网络连接。
使用ChromeWebView客户端和控制台记录输出
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");
}
希望它可以帮助他人。
答案 2 :(得分:0)
嗯,简短的回答是,它的工作原理非常相似 shouldOverrideUrlLoading(WebView视图,String url),如图所示 WebView教程。
为了帮助您入门,请参阅下面的代码。你只需覆盖 你的.InterceptRequest(WebView视图,String url)方法 WebViewClient。显然你不必内联,但为了 为了紧凑而这就是我所做的:
看看this。