房间插入物插入两次或三次后完全停止工作

时间:2019-02-26 08:14:24

标签: android android-room

我在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中选择*),并将其显示给用户。但是,如果我停止应用程序并重新启动它,该行就消失了(因为它们不在数据库中)。

1 个答案:

答案 0 :(得分:1)

我找到了答案,也可以说一个解决方案,但是目前我不明白为什么这种行为会改变,因为我没有更改应用程序中的任何内容。

通过将JournalMode从 WRITE_AHEAD_LOGGING (或自动)更改为 TRUNCATE ,我所有的更改都直接在数据库中执行,而我没有任何奇怪的内存数据库。