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(プロバイダーが無効なコンテンツURIを受け取った場合にこれをスローすることを選択できます)

NullPointerException "

だから私は今混乱しています-私は捕まえることができSQLiteExceptionますか?

4

1 に答える 1

1

可能な限り、例外が発生したクラスまたはコンポーネントで例外をキャッチする必要があります。ある種のブロードキャストメカニズムまたは戻り値のセマンティクスを使用して、プロセス全体のエラーを報告します。

確かにトリッキーな状況です。SQLite(または他の例外)がContentProviderで発生した場合、プロバイダーはカーソルでnullを返すのではなく、例外を上方に伝播する必要があると言う人もいます。ただし、これは通常、プロセス間では機能しません。一方、nullを返すことは、多くの情報を提供しません。

限られた例外のセットはプロセスの境界を越えますが、SQLiteExceptionはその中には含まれていません。それでも、それらは有用/適切である可能性があります。

于 2012-11-16T01:35:48.137 に答える