在这种情况下:
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));
有没有人有任何其他建议?如果是这样,我很乐意听到他们。谢谢!
答案 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;
}
然后用你喜欢的任何代码包围它。