如何在Android活动中处理SQLiteException?

时间:2012-11-15 21:43:30

标签: android sqlite exception-handling android-activity android-contentprovider

我正在研究如何处理Android中的异常。

在Notepad Content Provider示例代码的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添加额外的捕获来做到这一点。但是,我在Google文档中阅读了以下信息:

  

“请记住,Android系统必须能够跨进程边界传达异常.Android可以针对以下异常执行此操作,这些异常在>处理查询错误时可能很有用:

     

IllegalArgumentException (如果您的提供商收到>无效的内容URI,您可以选择抛出此内容)

     

的NullPointerException

所以我现在很困惑 - 我可以抓住SQLiteException吗?

1 个答案:

答案 0 :(得分:1)

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

这无疑是一个棘手的情况。有人说如果在ContentProvider中发生SQLite(或其他异常),则提供程序应向上传播异常,而不是在Cursor中返回null。但是,这通常不会跨进程工作!另一方面,返回null并不会为您提供大量信息。

一组有限的异常do traverse process boundaries,但SQLiteException不在其中 - 它们可能仍然有用/适当。