在do ... while()评估中处理try / catch异常的最佳方法是什么?

时间:2015-05-12 17:57:17

标签: java exception-handling try-catch do-while

在这种情况下:

Cursor cursor = dbHandler.fetchEvents();
boolean someBool = true;

do {
    someStuff();
    variables = things;
    otherStuff();
} while (someBool && cursor.moveToNext());

cursor.moveToNext()有可能抛出许多异常,特别是在我处理光标时我的数据库意外关闭时。

处理while()评估中抛出的任何可能异常的最佳方法是什么?目前,整件事情只是崩溃了。我宁愿避免这种情况。编译器不喜欢我将try / catch直接添加到while()eval中的努力,而且它很丑陋。我想我需要创建一个新的方法:

private boolean moveToNext(cursor) {
    boolean result = false;
    try {
        result = cursor.moveToNext();
    } catch (Exception e) {
        ... error handling ...
    }
    return result;
}

然后将我的eval循环更改为:

Cursor cursor = dbHandler.fetchEvents();
boolean someBool = true;

do {
    someStuff();
    variables = things;
    otherStuff();
} while (someBool && moveToNext(cursor));

有没有人有任何其他建议?如果是这样,我很乐意听到他们。谢谢!

3 个答案:

答案 0 :(得分:2)

将整个代码块放在try / catch块中,该块应在丢失数据库连接时捕获。

然后你需要重新调查整个块以查看清理有意义的内容,这将为你提供try / catch的“catch块”的内容。一旦你这样做,你可能会注意到你的真实代码的进一步改进,这可能会使你发布这个例子,并且当你关注你关心的内容时,建议的相关性会降低。

答案 1 :(得分:2)

这实际上取决于遇到错误时您想要发生什么。当你得到异常时,你是否应该跳过循环的迭代并转到下一个循环,或者只是停止迭代?或者整个循环是否被堵塞,你需要告诉你的用户出了什么问题?

如果您真的关心分别处理循环的每个迭代,那么您的方法将正常工作。或者,如果您只想检测整个循环是否遇到错误,那么您可以将整个事件包装在try块中:

try {
   Cursor cursor = dbHandler.fetchEvents();
   boolean someBool = true;

   do {
        someStuff();
        variables = things;
        otherStuff();
   } while (someBool && cursor.moveToNext());
} catch (Exception e) {
  //report to the user that the loop failed
}

答案 2 :(得分:1)

您始终可以将while()中的代码移动到循环体中,没什么大不了的。

while(true)
{

    ...
    if( ! someBool )
        break;
    if( ! cursor.moveNext() )
        break;
}

然后用你喜欢的任何代码包围它。