我有一個應用程序,其中有數據庫活動的時間。有時我會用SQLite的'數據庫被鎖定'錯誤導致SQLiteExceptions。我曾嘗試過使用:在Android中處理sqlite'數據庫被鎖定'錯誤
if((!db.isDbLockedByCurrentThread())&&(!db.isDbLockedByOtherThreads())) {
使用保存或插入之前,但這一直沒有成功。所以,我在課堂上設置了以下內容。 MyApplication的延伸應用,像這樣:
private AtomicBoolean writingToDataBaseFlag = new AtomicBoolean(false);
與訪問者:
public AtomicBoolean getWritingToDataBaseFlag() {
return writingToDataBaseFlag;
}
,我想執行插入或保存我做這樣的事情的任何時間:
boolean succeeded = false;
while(!succeeded) {
if(application.getWritingToDataBaseFlag().compareAndSet(false, true)) {
if((!db.isDbLockedByCurrentThread())&&(!db.isDbLockedByOtherThreads())) {
if(!activity.isFinishing()) {
set_id(db.insert(SDIGENRE, SDIID, cv));
}
}
application.getWritingToDataBaseFlag().compareAndSet(true, false);
succeeded = true;
} else {
// Wait 100 millis
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
這似乎在相當長一段時間內運作良好。
- 這是解決此問題的正確方法嗎?
- 我已經開始再次看到這些錯誤;有沒有關於如何調試這個問題的建議?
感謝您的任何幫助, 朱利葉斯。