1

これが私のコードです:(「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()

不足している情報がある場合は、お問い合わせください。これを解決する方法がわかりません。

4

2 に答える 2

0

.create() を取り出してみてください。AlertDialog を初期化して表示するだけです。

于 2011-01-05T21:15:25.123 に答える
0

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;
}

明らかに、必要に応じて、デフォルトのボタン リスナーを独自のものに置き換えることができます。

于 2011-01-06T12:19:06.960 に答える