У меня есть следующий код:
try {
res = new Utils(ubc_context).new DownloadCalendarTask().execute().get();
} catch (InterruptedException e) {
Log.v("downloadcalendar", "interruptedexecution : " + e.getLocalizedMessage());
res = false;
} catch (ExecutionException e) {
Log.v("downloadcalendar", "executionexception : " + e.getLocalizedMessage());
res = false;
}
Log.v("displaymenu", "A");
public class Utils {
private Context context;
public Utils(Context context) {
this.context = context;
}
public class DownloadCalendarTask extends AsyncTask<Void, Void, Boolean> {
private ProgressDialog dialog;
public DownloadCalendarTask() {
dialog = new ProgressDialog(context);
}
protected void onPreExecute() {
Log.v("preexecute", "A");
dialog.setMessage("Loading calendar, please wait...");
Log.v("preexecute", "B");
dialog.show();
Log.v("preexecute", "C");
}
protected Boolean doInBackground(Void... arg0) {
// do some work here...
return (Boolean) false;
}
protected void onPostExecute() {
Log.d("utils", "entered onpostexecute");
dialog.dismiss();
}
}
}
Первая часть кода прикреплена к слушателю onClick
для кнопки.Когда я нажимаю кнопку, кнопка мигает (как показывает, что она была нажата), а затем, примерно через 8 секунд, появляется диалоговое окно загрузки, но оно никогда не заканчивается.
Согласно logcat, как только я нажимаю кнопку, onPreExecute
выполняется, как Dialog.show()
, поэтому моя первая проблема - почему эта 8-секундная задержка?В течение этих 8 секунд logcat показывает, что выполняется doInBackground
.Однако, согласно logcat (это вторая проблема), onPostExecute никогда не вызывается (и поэтому Dialog.dismiss ()) никогда не запускается.
Logcat показывает, что все, что следует за DownloadCalendarTask().execute().get()
, выполняется, так как будто onPostExecute
только что пропущен.
Большое спасибо за вашу помощь!