我正在研究如何在android中处理异常。
在记事本内容提供程序示例代码中的update()
函数中,它调用getWriteableDatabase()
,这可能会抛出SQLiteException
。
我注意到NoteEditor
Activity
saveNote()
函数有以下代码:
// Commit all of our changes to persistent storage. When the update completes
// the content provider will notify the cursor of the change, which will
// cause the UI to be updated.
try {
getContentResolver().update(mUri, values, null, null);
} catch (NullPointerException e) {
Log.e(TAG, e.getMessage());
}
如果发生
SQLiteException
怎么办?。我希望能够在Activity
中捕获此异常并向用户显示适当的消息(通过toast或类似的方式)。我想我可以为
SQLiteException
添加一个额外的捕获。不过,我在谷歌文档中看到了以下信息:“请记住,android系统必须能够跨进程边界传递异常。Android可以针对以下异常执行此操作,这些异常可能在>处理查询错误时很有用:
IllegalargumentException(如果您的提供商收到一个>无效的内容uri,您可以选择抛出此异常)
空指针异常“
所以我现在很困惑-我能不能抓住
SQLiteException
呢? 最佳答案
只要可能,就应该在发生异常的类或组件中捕获异常。使用某种广播机制或返回值语义来跨进程报告错误。
诚然,这是一个棘手的局面。有些人说,如果contentprovider中出现sqlite(或其他异常),那么提供者应该向上传播异常,而不是在游标中返回null。然而,这通常不会跨流程工作!另一方面,返回null并不能提供很多信息。
一组有限的异常do traverse process boundaries,但sqliteexception不在其中-它们仍然可能有用/合适。