我有一些代码在 AsyncTask 中进行一些处理,当它运行时我想显示一个进度对话框。我曾多次希望更新该消息,但遇到了一些麻烦。这是我到目前为止所拥有的:
class ShowDialogAsyncTask extends AsyncTask<Void, String, Void>{
private ProgressDialog progressSpinner;
@Override
protected void onPreExecute() {
ProgressDialog progressSpinner = new ProgressDialog(MainActivity.this);
progressSpinner.setTitle("File Download");
progressSpinner.setMessage("Connecting to Internet");
progressSpinner.show();
}
@Override
protected Void doInBackground(Void... params)
{
Log.v("doInBackground","1");
try {
Log.v("doInBackground","2");
onProgressUpdate("Downloading File");
//do some stuff
} catch (IOException e) {
result = "Error";
}
onProgressUpdate("Complete!");
SystemClock.sleep(300);
return null;
}
protected void onProgressUpdate(String... values)
{
Log.e("onProgressUpdate",values[0]);
try{
progressSpinner.setMessage(values[0]);
}catch(Exception e){Log.e("onProgressUpdate","Error!");}
Log.e("onProgressUpdate","Success!");
}
@Override
protected void onPostExecute(Void result)
{
progressSpinner.dismiss();
vf.showNext();
}
}
我希望更新消息的代码不起作用,它只是抛出异常。然后,当我尝试关闭进度对话框时,整个事情崩溃了。
我对 Android 开发还很陌生,所以我非常感谢任何指点。
Logcat 条目的情况有点梨形。
03-22 22:59:30.189: W/dalvikvm(8133): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-22 22:59:30.189: E/AndroidRuntime(8133): Uncaught handler: thread main exiting due to uncaught exception
03-22 22:59:30.195: E/AndroidRuntime(8133): java.lang.NullPointerException
--更新--
看来我的问题是我声明进度对话框的地方。我最终发现我可以在新创建的构造函数中声明进度对话框,如下所示
progressSpinner = new ProgressDialog(mContext);
然后,它将允许 AsyncTask 类的所有其他方法访问以更新消息。
最佳答案
问题可能是您在创建 ProgressDialog
时如何引用 MainActivity
。将公共(public)构造函数添加到您的 AsyncTask
和名为 mContext
的类字段:
public ShowDialogAsyncTask(Context c){
mContext = c;
}
在创建类的对象时在 MainActivity
中传递 this
:
ShowDialogAsyncTask task = new ShowDialogAsyncTask(this);
在您的AsyncTask
中,使用该上下文创建ProgressDialog
关于java - Android:AsyncTask 中的进度对话框错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581310/