Ajaxリクエストを送信し、レスポンスからHTMLを解析/操作し、HTMLデータから新しいオブジェクトを作成するバックグラウンドタスクをAndroidアプリで実行したいと思います。
データの要求と操作、および新しいオブジェクトの作成は非常に簡単です (マルチスレッドなしで)。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 構造全体を解析する必要がありますか)?
前もって感謝します!