プログラムは、カーソルを取得し、いくつかの異なる場所でwhile(cursor.moveToNext())
でそれをループしますが、特に1は、常にこの例外を与えている:SQLiteDiskIOException:Cursor.moveToNext(で起こったディスクI/Oエラー)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:296)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.AbstractCursor.moveToNext(AbstractCursor.java:256)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at ... [my code]
それはデバッグでは、while(cursor.moveToNext())
行に達し、このエラーをスローする前に数秒間ポーズします。
このエラーが発生する可能性のある問題は何ですか?
私はそれはまた、同じ例外でクラッシュしcursor.getCount()
を呼び出そう
追加情報。
この問題は、データベースの1つのテーブルにのみ影響していました。私は電話機からデータベースファイルを取り出し、それを自分のコンピュータで開いたところ、問題なく見えました。私は問題を引き起こしていた同じクエリを実行することができましたが、うまくいきました。
その後、電話からアプリを完全に削除し、それを新しく再インストールしました。問題は消えてしまったようです。だから、一方で、それは破損したテーブルのように見えたし、他にはそれがなかった...
更新が
このエラーは、同じテーブルに再び起きています。デバイスにアプリケーションを再インストールした後、しばらくの間問題が解消されました。私はそれが始まる時を追うことができるかどうかを見るでしょう。
破損データのようですか? – Shardul
それは単一のテーブルに限られているようで、並行性の問題ではないことを確認するためにいくつかのテストを実行しました。データベースファイルをディスクから取り出して見てもらえるかどうか確認します。 – cottonBallPaws
私はディスクからdbファイルを取り出し、sqliteプログラムを使って開き、全く同じ質問を実行することができます。問題なくアプリで実行しています。 – cottonBallPaws