У меня есть AsyncTask, который должен показывать индикатор выполнения, когда он загружает некоторые вещи через Интернет. Иногда он работает как шарм, и иногда он не показывает индикатор прогресса. Вот код:
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);
}
Возможно, это связано с тем, что параметр void вызывает эту проблему. Просто попробуйте использовать Integer в качестве параметров.:
public class Upload extends AsyncTask<Integer, Integer, Integer>
AsyncTask
внутренним классом вашейActivity
или отдельным классом?