В моей функции doInBackground AsyncTask, я звоню, чтобы это окно подтверждения:Android: Ждите UI, чтобы закончить в AsyncTask
void CreateOKDialog(final String message)
{
runOnUiThread(new Runnable() {
@Override
public void run()
{
AlertDialog.Builder builder = new AlertDialog.Builder(trip.this);
builder.setTitle(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
После вызова функции выше в doInBackground() я начала новой деятельности. Проблема заключается в том, что, поскольку он асинхронен, он не дожидается завершения указанной выше функции. Я могу просто увидеть всплывающее окно, и оно закрывается. Как это решить?
CreateOKDialog("Trip cancelled");
startActivity(new Intent(trip.this, login.class));
Edit:
void CreateOKDialog(String message)
{
AlertDialog.Builder builder = new AlertDialog.Builder(trip.this);
builder.setTitle(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
Я называю эту функцию:
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if(isError)
CreateOKDialog("Error cancelling trip");
else {
CreateOKDialog("Trip cancelled");
startActivity(new Intent(trip.this, login.class));
}
}
Он по-прежнему не ждать, пока меня нажать OK, просто всплывает и исчезает.
Почему вы создаете диалог в фоновом потоке? – tyczj
На самом деле мне нужно сделать некоторую работу с мылом в AsyncTask, а затем, после завершения работы, отобразите диалог пользователю и начните новое действие. Он показывает ошибку, когда этот диалог отображается в doInBackground –
, если вам нужно отобразить диалоговое окно, когда работа выполнена, вы должны использовать onPostExecute, который находится в основном потоке, поэтому решает вашу задачу ожидания. – tyczj