3

我正在研究如何处理 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并向用户显示适当的消息(通过吐司或类似的东西)。

我想我可以通过为SQLiteException. 但是,我在 Google 文档中阅读了以下信息:

“请记住,Android 系统必须能够跨进程边界传递异常。Android 可以针对以下可能对处理查询错误有用的异常执行此操作:

IllegalArgumentException(如果您的提供者收到 >invalid content URI,您可以选择抛出此异常)

空指针异常"

所以我现在很困惑——我能不能抓住SQLiteException

4

1 回答 1

1

只要有可能,您应该在发生异常的类或组件中捕获异常。使用某种广播机制或返回值语义来报告跨进程的错误。

诚然,这是一个棘手的情况。有人说,如果 ContentProvider 中出现 SQLite(或其他 Exception),提供者应该向上传播异常,而不是在 Cursor 中返回 null。但是,这通常不适用于跨进程!另一方面,返回 null 不会给你很多信息。

一组有限的异常确实会遍历进程边界,但 SQLiteException 不在其中——它们仍然可能有用/合适。

于 2012-11-16T01:35:48.137 回答