【发布时间】:2017-10-12 01:11:54
【问题描述】:
在向用户显示之前,我需要从 WebView 中的每个页面中解析 JSON 内容。
为此,我需要解析 JSON 元素,然后才能使用 shouldOverrideUrlLoading 方法。在解析 JSON 对象之前,我无法使用它,因为我依赖该元素作为该方法实现的一部分。
我创建了一个名为jsonParsed 的变量来指示我是否从JSON 对象中获得了所有需要的信息。
起初,它被初始化为假。
当我从服务器收到响应时,我知道对象已被解析,因此我在 onLoaded 方法中将变量更改为 true,然后代码已准备好获取信息并进行检查。
这是想要的过程:
- 用户打开新页面
- 自动输入
shouldOverrideUrlLoading,然后输入if语句(JSON 尚未解析) - 在
OnResponse中获取 JSON 响应 - 回到
shouldOverrideUrlLoading,输入else语句(解析JSON)
如您所见,每个进程都应该经过if和else语句,解析JSON之前的if和解析之后的else。
问题:
shouldOverrideUrlLoading 在每个步骤 1 中都会到达,但每次都会进入不同的语句。第一次进入if(步骤 2+3),下一次进入else(步骤 4),这个过程不断重复。 ..
我认为这条线 webView.loadUrl(loadingURL); 不调用 shouldOverrideUrlLoading 出于某种原因。
这是我的代码 sn-p:
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
mProgressDialog.show();
}
@Override
public boolean shouldOverrideUrlLoading(WebView wView, String url){
loadingURL=url;
if (!jsonParsed){
/** JSON object is not parsed
* Some code for adding request
to requestQueue and than loading new url in onResponse method... */
}
else {
/** JSON object is parsed, starting checking process
* I need to check this URL and decide whether or not to override it*/
jsonParsed=false;
Root root = new Gson().fromJson(jsonResponse, Root.class);
for (Page page : root.query.pages.values()) {
firstParagraph=page.extract; //Parsing process, works fine
}
if (firstParagraph!=null) {
//If the webView isn't Wikipedia's article, it will be null
if (firstParagraph.contains(allowedContent)) {
//Passing URL to view
return true;
}
}
return false; //The URL leads to unallowed content
}
}
@Override
public void onPageFinished(WebView view, String url) {
CloseBlocksAndDisableEdit(view);
mProgressDialog.dismiss();
}
private final Response.Listener<String> onLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
jsonResponse=response; //Getting response
jsonParsed=true; //Object was examined
webView.loadUrl(loadingURL);
}
};
造成此问题的原因可能是什么?
如果这种方式不可能,我想知道哪种方式更好......
【问题讨论】:
-
请更具体地说明您的问题。
-
我已经编辑了我的问题并试图更具体。
-
您在 webview 客户端中使用的任何语句都会循环...这意味着您必须使用 catch 机制来获取您想要的内容并结束循环。
-
我真的不明白这里有什么循环。我已经编辑了我的问题,试图找到更具体的问题......
标签: android json parsing android-webview android-volley