我想在我的 android 应用程序中运行一个后台任务,它发送一个 Ajax 请求,从响应中解析/操作 HTML 并从 HTML 数据创建一个新对象。
请求和操作数据并创建新对象(无需多线程)非常容易。我可以创建一个 WebView,使用一些 JavaScript 函数加载一个本地 HTML 文件,从 JavaScript 发送一个 Ajax 请求,使用 jQuery 对其进行操作,然后通过“MyJavaScriptInterface”将其发送回来。
Java 代码片段
// method of 'MyJavaScriptInterface'
public void processJSON(String jsonArrayString) {
try {
JSONArray array = new JSONArray(jsonArrayString);
for (int i = 0; i < array.length(); i++) {
JSONObject row = array.getJSONObject(i);
// MyObject obj = new MyObject(row.getString("title"),
// row.getString("href") );
// do something fancy with the object
}
} catch (JSONException e) {
Log.e("MyJavaScriptInterface", e.getMessage(), e);
}
}
// initialize WebView
webView.addJavascriptInterface(new MyJavaScriptInterface(), "android");
// load local html file with JavaScript functions
webView.loadUrl("file:///android_asset/www/index.html");
JavaScript 代码片段
$.ajax({
url: 'http://example.com/index',
success: function(data) {
$(data).find('#container').children().each(function(){
jsonArray.push( {
'title': this.title,
'href': this.href
} )
});
jsonArray = JSON.stringify(jsonArray);
// send 'jsonArray' back to the android device
android.processJSON( jsonArray );
}
});
HTML 代码片段:
这就是网站的样子——但我无法控制内容。
<!DOCTYPE html>
<html>
<!-- header -->
[...]
<body>
<div id="container">
<a href="someUrl" title="someTitle"><img src="relativeImageUrl"></a>
<!-- more links -->
[...]
</div>
</body>
</html>
我想在一个单独的线程中加载数据,但这对于 WebView 是不可能的,所以这是我的问题:
问题
- 如果没有jQuery 和 JavaScript,我应该如何执行相同的任务?
- 有没有一种简单的方法可以访问 Java 中的 DOM(或者我是否必须解析 HTML 数据的整个 XML 结构)?
提前致谢!