Загрузка списка просмотра при использовании WebView для очистки некоторых данных из Интернета - PullRequest
0 голосов
/ 27 января 2012

Во-первых, это мой исходный код

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.

1 Ответ

0 голосов
/ 27 января 2012

все происходит так, как должно происходить.
Когда вы начали загрузку webView, это другой поток, и, следовательно, он просто запускается, и элемент управления переходит к "onPostExecute ()".

Если выЕсли вы хотите что-то сделать (заполнив lis) после окончания загрузки страницы, вы должны добавить этот код в метод onPageFinished () webView.

Это метод (обратный вызов), предоставленный для этой цели, и название также предполагает, что.

...