Теперь главный вопрос, который я хочу задать. Я покажу вам мой код и, возможно, вы поймете, почему он не работает должным образом.
Я считаю, что ваша проблема заключается в том, что при вставке AudioFile идентификатор не устанавливается и, следовательно, 0 вобъект AudioFile audioFile. Тем не менее, после вставки идентификатор будет автоматически сгенерирован и не будет 0, скорее всего, это будет количество объектов AudioFile, вставленных за некоторое время + 1.
Без установки id на затемиспользовать тот же объект AudioFile для обновления / удаления будет пытаться обновить удаление, используя идентификатор 0 . Такой строки не будет.
Исправление при условии, что для AudioFile существует метод setId , но при условии отсутствия обработки неудачной вставки можно использовать: -
audioFile.setId(audioFileDao.insertAudioFile(audioFile));
Исправление, которое может обработать неудачную вставку, которая не привела к исключению, может быть: -
long insertedId = audioFileDao.insertAudioFile(audioFile);
if (insertedId > 0) {
audioFile.setId(insertedId);
} else {
//......... handle not inserted
}
Пример / Демо
Следующий кодпри запуске показывает вышеприведенное (ваши Entity и Dao были скопированы как есть): -
...... 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
);
}
Результат (журнал сверху): -
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
Что вы думаете о комнате?
Это вопрос мнений, поэтому не по теме.