我有一个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始终工作,有时它总是像魅力一样工作。但有时候,上传时没有进度条。这是竞争条件吗?我不这么认为,但我找不到任何解释。
答案 0 :(得分:1)
您在课堂上创建了两次对象。 ProgressDialog.show
已经返回了一个创建的ProgressDialog
对象,但您已经在顶部实例化了它。 ProgressDialog
应该被实例化一次,所以尝试删除顶部的实例化并再试一次,如下所示:
private ProgressDialog dialog;
protected void onPreExecute() {
dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}
答案 1 :(得分:0)
可能是因为void参数导致了这个问题。只是尝试使用Integer作为参数。:
public class Upload extends AsyncTask<Integer, Integer, Integer>