Почему мое приложение застревает, когда я показываю предупреждение в моем собственном методе "uncoughtException ()"? - PullRequest
1 голос
/ 05 января 2011

Вот мой код: («Apagar» означает «Выключить», «reiniciar» означает «перезапустить»)

public void uncaughtException(Thread thread, Throwable ex)
{
    try
    {
        AlertDialog alertDialog;
        alertDialog = new AlertDialog.Builder(iAct).create();
        //alertDialog.setTitle("");
        alertDialog.setMessage("Se ah producído un error y la aplicación no puede continuar funcionando." +
                               "¿Desea reiniciarla o finalizarla?");
        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Reiniciar", new ReiniciarOnClickListener(iAct));
        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE,"Apagar", new ApagarOnClickListener(iAct));
        alertDialog.show();
    }catch(Exception e){
        Thread.setDefaultUncaughtExceptionHandler(iDefaultHandler);
        iDefaultHandler.uncaughtException(thread, ex);
    }
}

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

В iDefaultHandler Я сохранил результат getDefaultUncoughtException() перед установкой моего.

Любая информация, которая отсутствует, пожалуйста, попросите ее.Я не знаю, как это решить.

Ответы [ 2 ]

0 голосов
/ 06 января 2011

Вы пытались использовать onCreateDialog для создания диалога? Что-то вроде:

private static final int DIALOG_UNCAUGHT_EXCEPTION = 0;

...

public void uncaughtException(Thread thread, Throwable ex)
{
    try
    {
        showDialog(DIALOG_UNCAUGHT_EXCEPTION);
    }catch(Exception e)
    {
        Thread.setDefaultUncaughtExceptionHandler(iDefaultHandler);
        iDefaultHandler.uncaughtException(thread, ex);
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch (id) {
    case DIALOG_UNCAUGHT_EXCEPTION:
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setMessage("message")
            .setPositiveButton("Reiniciar",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do stuff;
                }
            })
            .setNegativeButton("Apagar",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do other stuff;
                }
            });
        alertDialog.create();
        break;
    default:
        dialog = null;
        break;
    }
    return dialog;
}

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

0 голосов
/ 06 января 2011

Попробуйте убрать .create (). Просто запустите AlertDialog, а затем покажите его.

...