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 块来捕获所有异常并向我发送邮件。这可能吗?

谢谢 !

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


}

但是这样最好让你的 Activity 实现一些接口,比如

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 回答