我有一個有趣的問題。我在Android上的AsyncTask中執行了SQLite更新(因爲在進行數據庫調用之前,我還必須執行大量的遠程調用)。代碼就像一個魅力,除非應用程序被推到後臺(例如,使用主頁按鈕)。該任務在後臺繼續成功工作,進行數據庫調用並返回1行更改,但數據從未真正將其發送到數據庫。沒有錯誤或例外。即使陌生人,日誌顯示一切正常工作 - 沒有例外,納達。 再次,當不推到背景這工作正常。Android SQLite更新不能在AsyncTask的後臺工作
召喚:
result = (sqlDB.update("FormInstance", values, "InstanceId=?", new String[] { String.valueOf(form.getSubmissionId()) }) > 0);
還沒有與此有關的呼叫(除非它是Android的SQLite代碼的引擎蓋下發生)的交易。
任何人都知道爲什麼這可能是這種情況?數據庫連接或SQLLite發生什麼事,我不知道什麼時候推到後臺?
UPDATE
我試圖用的BeginTransaction包裹DB呼叫/ endtrans沒有任何成功:
sqlDB.beginTransaction();
try {
result = (sqlDB.update("FormInstance", values, "InstanceId=?", new String[] { String.valueOf(form.getSubmissionId()) }) > 0);
}
finally {
sqlDB.endTransaction();
}
仍然充當好像它是成功的,但絕不數據committed.Please注意,我從設備中拉出數據庫並確認它沒有被更新。
聽起來像您的交易沒有在查詢結束時提交。您是否嘗試過自己編譯查詢並在事務塊之間執行? – droidpl
@droidpl Sry-沒有涉及的交易。 –
每次您在數據庫中執行某項操作時,都會創建一個事務,儘管更新調用會在幕後進行。你可以用隱式事務來調試,以調試正在發生的事情嗎? – droidpl