0

私は Android アプリケーションをコーディングしていますが、スローされたすべての例外をメイン アクティビティでキャッチし、メールを送信する必要があります。しかし、私のアプリケーションの一部の領域では、メソッドで例外をスローすることはできません:

例: カスタム DialogFragment の onCreateDialog():

    builder.setView(addCatLayout)
                    // Add action buttons
                    .setPositiveButton(R.string.button_ok,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int id) {

                                    try {
                                    // Save some data in DB here
                                    } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                    dialog.dismiss();
                                }
                            })
                    .setNegativeButton(R.string.button_cancel,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    // Close the dialog window
                                    dialog.dismiss();
                                }
                            });
            return builder.create();

このメソッドから try catch ブロックを削除し、メイン アクティビティでキャッチされる例外を直接スローするにはどうすればよいですか? すべての例外をキャッチしてメールを送信するメイン アクティビティに、try catch ブロックを 1 つだけ配置したいと考えています。これは可能ですか?

ありがとうございました !

4

1 に答える 1

1

アクティビティでダイアログを作成し、そこで例外を処理したい場合

アクティビティ:

protected void handleException(Exception e) {
    e.printStackTrace();
}

クリック時:

@Override
public void onClick(DialogInterface dialog, int id) {
    try {
        // Save some data in DB here
    } catch (Exception e) {
        // TODO Auto-generated catch block
        handleException(e); // methods are visible to nested classes
    }
    dialog.dismiss();
 }

ダイアログ外のアクティビティを作成している場合は、

public void handleException(Exception e) {
    e.printStackTrace();
}

ダイアログ作成クラス

public static void createDialog(final YourActivity activity) {

....

    @Override
    public void onClick(DialogInterface dialog, int id) {
        try {
            // Save some data in DB here
        } catch (Exception e) {
            activity.handleException(e);
        }
        dialog.dismiss();
     }


}

ただし、そのように、アクティビティに次のようなインターフェイスを実装させることをお勧めします

public final class YourActivity implements ExceptionHandler {

例外ハンドラの場所

public interface ExceptionHandler {
    void handleException(Exception e);
}

そして、例外ハンドラ インターフェイスを渡します

public void createDialog(final ExceptionHandler handler) {
于 2013-02-13T11:50:02.473 に答える