从Dialog中抛出主要活动的异常

时间:2013-02-13 11:43:43

标签: android exception handle throw

我正在编写一个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 个答案:

答案 0 :(得分:1)

如果您在活动中创建对话框并想要处理异常

活性:

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

的OnClick:

@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();
     }


}

但是这样做是一种更好的做法,让你的Activity实现一些接口,比如

public final class YourActivity implements ExceptionHandler {

异常处理程序

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

并传递Exception处理程序接口

public void createDialog(final ExceptionHandler handler) {