0

私はandroid.os.AsyncTask取り扱いのアプローチに不慣れandroid.app.ProgressDialogです。特定のクエリを処理しandroid.database.Cursorて、必要なエンティティに変換するというこの問題があります。

私はこのテンプレートに従っていますが、常に私にを返しますandroid.view.WindowManager$BadTokenException

List<Entity> loadData() throws Exception {
    AsyncTask<Cursor, Void, List<Entity>> process = new AsyncTask<Cursor, Void, List<Entity>>() {
        ProgressDialog dialog;
        protected void onPreExecute() {
            dialog = ProgressDialog.show(getApplicationContext(), "Please wait...", "Loading data...");         
        }
        protected void onPostExcecute() {
            dialog.dismiss();
        }
        @Override
        protected List<Entity> doInBackground(Cursor... params) {
            List<Entity> entities = new ArrayList<Entity>();
            // process of convertion of data from android.database.Cursor to <pacakge>.Entity
            return entities;
        }
    }.execute(/* the query : android.database.Cursor */)
    return process.get();
}

私は何かが足りないのですか?

4

1 に答える 1

1

ProgressDialogAsyncTask のメソッドから表示するには、 asonPreExecute()の代わりに AsyncTask が実行されている Current Activity Context を使用getApplicationContext()します。

 dialog = ProgressDialog.show(Your_Current_Activity.this, 
                    "Please wait...",
                    "Loading data...");

AsyncTaskが別のクラスで実行されている場合はActivity、AsyncTask のクラス コンストラクターを使用して、現在のアクティビティ コンテキストを AsyncTask に渡す必要があります。

于 2013-02-05T16:15:57.303 に答える