我有一个 AsyncTask,它应该在通过 Internet 上传一些内容时显示进度条。有时它就像一个魅力,有时它不显示任何进度条。这是代码:
public class Upload extends AsyncTask<Void, Void, Void> {
private ProgressDialog dialog = new ProgressDialog(Activity.this);
protected void onPreExecute() {
dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}
@Override
protected Void doInBackground(Void... params) {
//upload stuff
return null;
}
protected void onPostExecute(Void result) {
try {
if (dialog.isShowing())
dialog.dismiss();
dialog = null;
} catch (Exception e) {
// nothing
}
Intent next = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(next);
}
}
}
doInBackground 和 onPostExecute 始终有效,有时它们一起工作就像一个魅力。但有时,上传时没有进度条。这是竞争条件吗?我不这么认为,但我找不到任何解释。
最佳答案
您在类里面创建了两次对象。 ProgressDialog.show
已经返回一个创建的 ProgressDialog
对象,但是您首先在顶部实例化了它。 ProgressDialog
应实例化一次,因此请尝试删除顶部的实例化并重试,如下所示:
private ProgressDialog dialog;
protected void onPreExecute() {
dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}
关于Android AsyncTask onPreExecute 未被不确定地调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11943133/