【问题标题】:Throw exception to main acivity from Dialog从对话框向主要活动抛出异常
【发布时间】:2013-01-28 22:52:20
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您可以通过抛出未经检查的异常来做到这一点。所以一个继承自 RuntimeException 的异常。像这样的异常,不必被捕获(检查)。

标签: android exception handle throw


【解决方案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) {

【讨论】:

  • 谢谢!我创建了接口,以这种方式处理异常是个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多