Окно Android AlertDialog не отображается - PullRequest
4 голосов
/ 19 февраля 2011

Я искал в Stackoverflow, просматривал примеры в Android Developer и некоторые книги, но я просто не понимаю.

Я пытаюсь показать окно AlertDialog, которое прерывает выполнение программы. Большинство примеров, которые я видел, не имеют кода после диалогового окна, и мне нужно, чтобы моя программа прекратила выполнение, пока не будет нажата кнопка AlertDialog. Похоже, что AlertDialog создается из другого потока, и я не уверен, как получить этот поток.

Логика программы: Если синтаксический анализ плох, программа принудительно закроется. Я хочу, чтобы пользователь знал, чтобы перезапустить программу, и все будет работать. (Я удаляю и воссоздаю таблицы, и они снова заполняются, когда программа запускается снова)

Вот код:

if(database populated)
{
  ....code.....

  if(parseok.contentEquals("Error"))
  {
    doForceClose();
  }
displayDate = "Last: " + parseok;  //I don't want the program to continue to here.
//Rest of code in the method.  If I continue the program will Force Close
}
else
  do something else

Вот метод AlertDialog:

private void doForceClose()
{
  String themessage = "Because some of the parameters have changed in the yada yada"; 

  AlertDialog.Builder ad = new AlertDialog.Builder (this);
  ad.setTitle("Internal Error");
  ad.setMessage(themessage);
  ad.setPositiveButton("Sorry", new OnClickListener()
  {
    public void onClick(DialogInterface dialog, int which)
    {
    finish();
    return;
    }
  });
  ad.create();
  ad.show();        
}

за исключением объявления, которое не показывается, и программа продолжает принудительно закрываться.

Очевидно, я чего-то не понимаю. Есть идеи?

изменить: я в классе, который расширяет деятельность

Ответы [ 3 ]

6 голосов
/ 19 февраля 2011

Я пытаюсь показать окно AlertDialog, которое прерывает выполнение программы.

, которого нет в Android и других системах пользовательского интерфейса.

Мне нужно, чтобы моя программа прекратила выполнение, пока не будет нажата кнопка AlertDialog.

Нет, вы этого не делаете.Программирование, управляемое событиями, использовалось в течение нескольких десятилетий.

Логика программы: Если синтаксический анализ плох, программа принудительно закрывается.

Это ваш код -- переписать его, чтобы он вел себя лучше.

Я не хочу, чтобы программа продолжала здесь.

Затем используйте else или return,или что-то в этом роде.

, за исключением объявления, которое не показывается, и программа продолжает принудительно закрываться.

Ваше диалоговое окно не появится, пока основной поток приложения не получит контроль сноваобработать ваш запрос - show() асинхронно.Скорее всего, раньше вы терпите крах.

Короче говоря, ваша стратегия решения вашей проблемы с синтаксическим анализом в корне неверна.

2 голосов
/ 19 июня 2012

Ответ Commonsware правильный. Позвольте мне попытаться сказать то же самое разными словами. Диалоговое окно предупреждения НЕ прерывает поток управления. Это просто «показ слева», когда программа ожидает ввода.

таким образом последовательность showAlert («это сообщение); шоу галереи (); возвращение;

это показывает только на мгновение. Выходом из этого является помещение вызова функции showGallery () внутри положительного ответа от AlertDialog.

Итак, говоря по-другому. Если вы хотите прервать поток вашего приложения с помощью AlertDialog (что мудро указано, что это неправильно), поместите код, который вы хотите выполнить после диалога, в обратный вызов onClick AlertDialog.

0 голосов
/ 25 января 2012

ОК, у меня была похожая ситуация.Я ожидал всплывающего диалогового окна, но это не так.Вместо этого произошло исключение.Место, где произошло исключение, было расположено в паре строк от места, где я ожидал диалог.Я исправил это исключение, и затем появилось мое диалоговое окно.

Это выглядит странно, и я думаю, что диалоговое окно требует времени, чтобы появиться, в то время как программа просто продолжает работать, и затем программа сталкивается с исключением, хронологическим (но не программно)перед диалогом.Вот почему я получил диалог после того, как исправил место исключения.

...