私のアプリでは、非同期タスクでいくつかのWebサービスを調整し、大きな応答を持つデータベース内の異なるテーブルに大きなデータを挿入する必要があります。エンド・トランザクション。問題はすべて私が新しいレコードを挿入しようとするとすべてのWebサービスの後にログが表示されます。失敗5(データベースがロックされています)。データベースがinTransaction()、isDbLockedByOtherThreads、およびisDbLockedByCurrentThreadによってロックされているかどうかを確認しました。すべてfalseを返す。Androidの障害5(データベースがロックされている)問題
これを解決する方法。
私は同時に2つの異なるスレッドでデータの書き込みと読み取りを行っていますが、これがデータベースロックの理由だと思いますか?特に私は異なるテーブルからデータを収集するためにジョイントを使用しています。 – Kishore
@Kishore:はい、間違いなくデータベースロックの理由です。データベースが[WAL](http://www.sqlite.org/wal.html)モードになっていない限り、**書き込みが進行中**は読み取りが許可されません**(トランザクション内を除く)。私はAndroidのビルドがWALモードをサポートしているとは思わない。 [有効にする](http://www.sqlite.org/pragma.html#pragma_journal_mode)と試してみてください。これにより、書込みトランザクションが進行中(チェックポイント操作中を除く)に読取りが可能になりますが、一度に1つのライターしか許可されません。 –