首先,讓我說,這個異常不會發生規律,發生在我身上只有幾次,可惜從來沒有當手機已連接並正在調試。 我得到的所有信息都來自用戶向我發送的Developer Console日誌和應用日誌。隨機SQLite數據庫更新空例外
首先,我把所有的信息是從開發人員控制檯:
Caused by: java.lang.NullPointerException
打電話時:
//private SQLiteDatabase mDb; initialized earlier
ContentValues args = new ContentValues();
args.put(KEY_ENABLED, isEnabled);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; //exception here
猜測,它可能通過MDB被空不知何故,我已經添加記錄在這裏引起的,知道究竟發生了什麼
//DbAdapter
public boolean updateIsAlarmChecked(long rowId, boolean isEnabled) {
try {
ContentValues args = new ContentValues();
args.put(KEY_ENABLED, isEnabled);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
} catch (Exception e) {
Utils.log("updateIsAlarmChecked exception: " + e.getMessage());
Utils.log("alarm enabled: " + isEnabled);
Utils.log("db is " + (mDb == null ? "null" : "not null"));
return false;
}
}
不幸的是,收到的日誌包含:
updateIsAlarmChecked exception: null
alarm enabled: true
db is not null
所以它看起來像是SQLiteDatabase內部的東西,但我怎麼才能找出究竟是什麼?或者,事實並非如此,因爲開發者控制檯沒有在該課程中顯示任何痕跡?
我也將寫什麼樣的行動造成的錯誤,也許,這將有助於
- 應用(據我所知)正常工作,活動產生了顯
- 用戶編輯報警 - 新的Activity B是打開,關於鬧鐘的信息從新創建並打開的DbAdapter中讀取(類似於NotePad Android示例中的類,如果需要,我可以提供更多的代碼)。
- 用戶完成編輯,他們是正確保存,B是整理意圖返回結果。其將對DBAdapter在封閉的onDestroy(我只注意到我知道這是不正確,因爲的onDestroy並不總是叫。莫非是錯誤的原因是什麼?不過,我只是試圖與註釋掉關閉運行,有沒有發生錯誤)
- onActivityResult被稱爲A,調用A的將對DBAdapter實例的updateIsAlarmChecked(也許這種情況是越來越「不正確」有時候?)發生
- 異常,並逮住,更新不成功
任何想法?所有幫助非常感謝
編輯: 最新日誌後小更新。 現在的代碼看起來像這樣:
ContentValues args = null;
try {
args = new ContentValues();
args.put(KEY_ENABLED, isEnabled);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; //null exception here
} catch (Exception e) {
Utils.log("alarm enabled: " + isEnabled); //true
Utils.log("alarm id= " + rowId); //there is alarm with this rowId
Utils.log("db is " + (mDb == null ? "null" : "not null")); //not null
Utils.log("args is " + (args == null ? "null" : "not null")); //not null
Logger.logException(e);
return false;
}
最糟糕的是,堆棧跟蹤點只用return語句行 - 應該不是進一步導致「變成了」更新方法? 任何想法,我可以用它做什麼?這是可怕的,它發生只是有時只有我能回覆用戶的是「試做一遍,它不能只是有時」 ......
這不是說每次在給定設備上都會發生錯誤嗎?正如我寫的,它發生在我身上的2-3次數百次編輯中。此外,我在許多其他情況下以這種方式使用布爾值,並且從未造成任何問題,所以我不認爲這種情況 – Koger
@Koger:您應該向我們展示更多錯誤!因爲我以前從不在數據庫中存儲布爾值,所以我不確定它是否正確!如果使用'Boolean'值保存數據庫沒有錯誤,那麼上面的代碼也沒有問題!所以,向我們展示更多錯誤日誌! –
我可以告訴你什麼更多的錯誤,這是我得到的唯一一個錯誤。我從開始就在SQLite中存儲布爾值,並且從來沒有造成任何麻煩,所以我非常確定這與它無關。但是如果你確定存儲布爾值會導致麻煩,那麼這可能取決於Android版本或類似的東西,讓我知道你是否知道類似的東西 – Koger