我在ROOM中进行了简单的插入,但是出于一个奇怪的原因,插入两次或三次后,我的插入在我的应用程序中无法正常工作。还有另一种怪异的行为,当插入时我可以成功插入,但是在数据库中查看时却什么也没有。
DAO
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(entryTable: EntryTable): Completable
ViewModel
entryRepository.saveEntryTable(EntryTable(fieldId, entryId, tabId, index))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Timber.d("<<<<<row saved!")
result.value = Status.SUCCESS
}, {
Timber.e(it)
Timber.d("<<<<<<<<<<<row not saved!")
result.value = Status.ERROR
})
OnSubscribe总是被触发,但是两次插入后,db中什么也没有,并且我的日志中没有错误。
也没有任何替代,因为每次都有一个新的PK。
修改
有关此问题的更多信息:
奇怪的是,房间数据库似乎以某种方式复制到内存中,当我的应用程序正在寻找新记录时,我可以拥有它们,例如(从entry_table中选择*),并将其显示给用户。但是,如果我停止应用程序并重新启动它,该行就消失了(因为它们不在数据库中)。
答案 0 :(得分:1)
我找到了答案,也可以说一个解决方案,但是目前我不明白为什么这种行为会改变,因为我没有更改应用程序中的任何内容。
通过将JournalMode从 WRITE_AHEAD_LOGGING (或自动)更改为 TRUNCATE ,我所有的更改都直接在数据库中执行,而我没有任何奇怪的内存数据库。