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

ProgressDialog从AsyncTask 的方法中显示onPreExecute()使用 AsyncTask 正在运行的当前活动上下文而不是getApplicationContext()

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

如果AsyncTask在单独的类中运行,Activity则需要使用 AsyncTask 的类构造函数在 AsyncTask 中传递当前活动上下文

于 2013-02-05T16:15:57.303 回答