0

最近、この役に立たないエラー メッセージに頭がおかしくなりました。Androidエミュレーター内では発生しません。Eclipseから起動したUSBデバッグを介して(Android 2.3.6)デバイスで実行している場合にのみ発生します。

実際に例外がスローされることはなく、データベース クエリが実際に失敗することはありません (すべてが正常に動作しているように見えます) が、実行するクエリごとにこれらのエラーの少なくとも 1 つを受け取ります。

私が言うことができる限り、私はすべてを正しくやっています:

  • シングルトンとして作成された1 つSQLiteOpenHelperのインスタンスを使用しています (同期された静的メソッドは、アプリケーションのコンテキストを使用して単一のインスタンスを取得します)。
  • などをgetWritableDatabase()実行する必要がある場合にのみ呼び出し、残りの時間は を使用します。updateinsertgetReadableDatabase()
  • 書き込み可能なデータベースに関係するすべてのアクションも、確実に呼び出されるようにtry/catch/finallyブロックを使用してトランザクションにラップされます。endTransaction()
  • 他のすべてのクエリはブロックにラップされて、try/catch可能なSQLException応答をキャッチし、適切にログに記録されます。
  • 私が使用しているclose()すべてSQLiteDatabaseCursorオブジェクトを呼び出しています。

これらのほとんどは、修正するまでエミュレーターでバックグラウンド エラーをスローしていたものであり、エミュレーターでアプリを実行すると、いかなる種類のデータベース エラーも表示されなくなりました。それでも、デバイスで実行すると、実行するすべてのクエリに対して、役に立たない「これは決して発生しないでください」というエラーが表示されますが、明らかな悪影響はありません。

もちろん、当分の間これらを無視していますが、他に考えられる原因は考えられません。私の SQL ステートメントはすべて有効であり、コードのほとんどは公式の Android チュートリアル (こちらなど) に基づいています。

これらのエラーが発生する理由を特定できる人はいますか? 他に考えられる原因は何ですか?

4

2 に答える 2

0

既に閉じられている sqlite db にアクセスしようとすると、このエラーが発生したことを覚えています。これは、複数のスレッドが同時に db にアクセスしていて、スレッドの 1 つが close を呼び出した場合に発生する可能性があります。sqlite dbをまったく閉じないことで問題を解決しました。お役に立てれば。

于 2013-11-13T04:11:43.603 に答える