避免Android上的try/catch

Jon*_*Jon 6 java android exception-handling

我是Android环境中的新手,我已经开始编写一些代码来对数据库执行一些查询.当我必须处理异常时,我不知道采用什么方法 - 在Android中我曾经使用throws过方法声明,但似乎throws在android 中是不允许的?只是try-catch?我这样说是因为eclipse不建议我添加throws声明,就像我在Android环境之外,我猜它与之相关extends Activity.那么在android中处理异常的适当方法是什么?围绕每个句子try-catch使我的代码看起来很糟糕,这不是我想要做的.

Zek*_*eki 13

如果您使用的方法已经抛出异常,您可能只想将异常重新抛出为新类型:

public void someMethod() throws IOException {
    try {
        //  Do database operation
    } catch (MyException e){
        throw new IOException(e.toString());
    }
}

//  Or, if there is no exception, use an unchecked exception:

public void otherMethod() {
    try {
        // DB operation
    } catch (MyException e){
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是MyException扩展RuntimeException.然后编译器不会强制您捕获它或将其添加到方法签名.RuntimeExceptions称为未经检查的异常,这意味着您不必通过try/catch检查它们是否发生.这些的例子是NullPointerArrayOutOfBounds.


mon*_*ack 3

您无法“通过 eclipse 在 android 中添加 throws”的原因是因为您不是定义接口或超类的人。如果您想向方法签名添加异常(就像您所说的通常那样),它也需要添加到接口中,并且您无法控制它们,因此无法更改它。

例如方法

protected void onCreate(Bundle savingInstanceState);

您在活动中重写它,如果您想引发异常,则需要将方法签名更改为(例如)

protected void onCreate(Bundle savingInstanceState) 抛出 MyException;

但随后它还需要更改 onCreate 的定义位置,即 Activity 类中的位置 - 这是一个您无法更改的类(因为它由 android 库提供)。

因此,您唯一的选择是捕获异常并对其执行某些操作(或忽略它)。你可以做一个吐司来显示错误

catch (Exception e) {
  Toast toast = Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT);
  toast.show();
}
Run Code Online (Sandbox Code Playgroud)