1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
現(xiàn)在是我想問(wèn)的主要問(wèn)題。我將向您展示我的代碼,也許您會(huì)明白為什么不能正常工作。
我相信您的問(wèn)題是,當(dāng)您插入 AudioFile 時(shí),未設(shè)置 id,因此 AudioFile 對(duì)象 audioFile 中的 id 為 0。但是,插入時(shí),id 將自動(dòng)生成,并且不會(huì)為 0,而可能是某個(gè)時(shí)間插入的 AudioFile 對(duì)象的數(shù)量 + 1。
如果不設(shè)置id,則使用相同的 AudioFile 對(duì)象來(lái)更新/刪除將嘗試使用0的 id 來(lái)更新刪除。不會(huì)有這樣的行。
假設(shè)AudioFile 存在setId方法,但不處理失敗的插入,可以使用以下修復(fù):-
audioFile.setId(audioFileDao.insertAudioFile(audioFile));
可以處理未導(dǎo)致異常的失敗插入的修復(fù)可能是:-
long insertedId = audioFileDao.insertAudioFile(audioFile);
if (insertedId > 0) {
audioFile.setId(insertedId);
} else {
//......... handle not inserted
}
示例/演示
以下代碼運(yùn)行時(shí)顯示上述內(nèi)容(您的 Entity 和 Dao 已按原樣復(fù)制):-
...... database built
mAudioFileDao = mAppDB.audioFileDao();
AudioFile a = new AudioFile();
a.setTitle("MySong");
a.setDuration(5);
a.setArtist("Fred");
a.setPath("/thepath");
logAudioFile(a,"Before Insert into DB");
long currentId = mAudioFileDao.insertAudioFile(a); //<<<<<<<<<< INSERT INTO DB
logAudioFile(a,"Immediately after Insert. ID returned from insert is " + currentId);
a.setId(currentId); //<<<<<<<<<< SET the the id of the AudioFile object a
logAudioFile(a,"After setting the ID to " + currentId);
mAudioFileDao.updateAudioFile(a);
List<AudioFile> audioFileList = mAudioFileDao.getAll();
for (AudioFile af: audioFileList) {
logAudioFile(af,"Extracted from DB");
}
mAudioFileDao.deleteAudioFile(a);
Log.d("AUDIOFILEINFO","Attempt to delete Audio File undertaken");
audioFileList = mAudioFileDao.getAll();
for (AudioFile af: audioFileList) {
logAudioFile(af,"After deletion");
}
logAudioFile方法是: -
private void logAudioFile(AudioFile a, String extra) {
Log.d(
"AUDIOFILEINFO",
"Title is " + a.getTitle() +
" ID is " + a.getId() +
"\n\tExtra Info is " + extra
);
}
結(jié)果(上面的日志):-
2019-10-06 11:03:39.757 D/AUDIOFILEINFO: Title is MySong ID is 0
Extra Info is Before Insert into DB
2019-10-06 11:03:39.808 D/AUDIOFILEINFO: Title is MySong ID is 0
Extra Info is Immediately after Insert. ID returned from insert is 1
2019-10-06 11:03:39.808 D/AUDIOFILEINFO: Title is MySong ID is 1
Extra Info is After setting the ID to 1
2019-10-06 11:03:39.829 D/AUDIOFILEINFO: Title is MySong ID is 1
Extra Info is Extracted from DB
2019-10-06 11:03:39.831 D/AUDIOFILEINFO: Attempt to delete Audio File undertaken
您對(duì)房間有何看法?
這是征求意見,所以是題外話。
添加回答
舉報(bào)