Во-первых, это мой исходный код
public void loadTheLoaiList()
{
Log.d("test", "Loading List");
DataListView dlv = new DataListView(Main.this, android.R.layout.simple_list_item_1, R.id.lblTheLoai, wpc.getCat().getTheLoai());
setListAdapter(dlv);
}
public void loadData()
{
AsyncTask<String, String, String> loadDataFromWeb = new AsyncTask<String, String, String>() {
private ProgressDialog pd = new ProgressDialog(Main.this);
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd.setTitle("Loading...");
if(!pd.isShowing())
{
pd.show();
}
}
@Override
protected String doInBackground(String... params) {
wpc = new WOIMPageControl(Main.this);
wv = (WebView) findViewById(R.id.webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view,
String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(url.equalsIgnoreCase("http://www.abc.net/"))
{
Log.d("test", "URL matched !");
wv.loadUrl("javascript:$(document).ready(function() {" +
"WOIM.getTheLoai($('html').html());" +
"});");
}
}
});
wv.addJavascriptInterface(wpc, "WOIM");
wv.loadUrl("http://www.abc.net/");
return "";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
if(pd.isShowing())
{
pd.hide();
}
loadTheLoaiList();
}
};
loadDataFromWeb.execute("");
Я использую addJavascriptInterface, чтобы получить HTML-код и обработать его, а затем установить для данных значение ArrayList
, а затем заполнить его значением ListView
.
Но когда я запускаю программу, ListView
не получает данные.
Я понял, потому что WebView просто вызывает метод loadUrl('http://abc.net')
, а затем сразу переходит к методу onPostExecute()
, не дожидаясь окончания загрузки WebView
Вот почему ListView
ArrayList
не имеет данных, поэтому ListView
не загружается.
Я не могу использовать Jsoup, потому что Jsoup не может обрабатывать ajax.