1

を表示しながら、をAsyncTaskロードするために使用しています。コンテンツが読み込まれてが表示されますが、実行が入らないので消えません。私が間違っていることを教えてもらえますか?divWebViewProgressDialogProgressDialogonPostExecute()

package xx.xxx.xxx;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.jsoup.nodes.Document;

import android.R.string;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class NewsActivity extends Activity {
    private WebView wView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_main);

        new LoadNews().execute("");
    }

    private class LoadNews extends AsyncTask<String, Integer, String> {
        private ProgressDialog Dialog = new ProgressDialog(NewsActivity.this);

        @Override
        protected String doInBackground(String... params) {
            String url = "http://www.example.com/example";

            Document doc;
            try {
                doc = Jsoup.connect(url).get();
                Elements ele = doc.select("div#examplediv");

                String html = ele.toString();
                String mime = "text/html";
                String encoding = "utf-8";

                wView = (WebView)findViewById(R.id.wvNews);
                wView.loadDataWithBaseURL(url, html, mime, encoding, null);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

        protected void onPreExecute()
        {
            Dialog.setMessage("please wait...");
            Dialog.show();
        }

        protected void onPostExecute(Void unused)    
        {
            try
            {
                if(Dialog.isShowing())
                {
                    Dialog.dismiss();
                }
            } catch(Exception e) {

            }
        }
    }
}
4

2 に答える 2

6

実際、あなたのAsyncTaskクラスの実装は間違っています..

あなたのコードにはたくさんの間違いがあります。

  1. doInBackground()Android で許可されていないUI (WebView) にアクセスしようとしています。doInBackground はワーカー スレッドで実行されますが、アクティビティ Ui (WebView) は MainUI スレッドにあります。

  2. の引数onPostExecute()と戻り値の型がdoInBackground()一致しません。

Android Developers のAsyncTask Class を参照して、その仕組みの基本的な基礎を入手してください。

于 2012-08-17T12:50:55.457 に答える
0

あなたのコードで私が見ることができるものから、あなたProgressDialogAsyncTask. のドキュメントをAsyncTaskonPostExecute見ると、メソッドを介して UI 要素のみを処理する必要があることがわかります。これは にWebViewも当てはまります。

onCreateメソッドの外部で変数を定義した後で、メソッド内の UI 要素への参照を取得して、onCreate他のメソッドからもアクセスできるようにすることをお勧めします。さらに、メソッドでProgressDalogyour を実行する直前に、 your を定義してインスタンス化する必要があります。次に、メソッドでダイアログを閉じます。AsyncTaskonCreateonPostExecute

于 2012-08-17T12:55:49.787 に答える