首页 > 解决方案 > 将数据推送到 Firebase 时,Android Room Insertion 被触发多次

问题描述

我正在开发一个将数据同时保存到 Firebase 到 Room 数据库的应用程序,

为了使用 Room,我使用了 ViewModel 和 Repository,它工作正常

notesViewModel.insert(note);

对于使用 Firebase,我使用的是普通推送,而且效果很好

mFBReference.child(Constants.CHILD_REF_VISITS_NOTES)
                .child(oneVisit.getVisitKey())
                .push()
                .setValue(note);

现在当我用一种方法把它们放在一起时

void updateNotes(OneNote note) {

    notesViewModel.insert(note);

    mFBReference.child(Constants.CHILD_REF_VISITS_NOTES)
            .child(oneVisit.getVisitKey())
            .push()
            .setValue(note);
}

Room 插入多次触发,每次插入新对象时,数量都会增加,但 firebase 部分工作正常。

对此有什么解释吗?

更新1:

我还在尝试,这个问题只是在我使用带有 Fragment 的 Tab 布局(有或没有 ViewPager)时发生,但如果我只使用一个 Activity 它工作正常。如果我将代码放在活动或片段中,同样的事情会给我同样的问题。

标签: androidfirebaseandroid-room

解决方案


简单的解决方案是在您的 Dao 函数中的 Insert 函数之上添加以下代码

@Insert(onConflict = OnConflictStrategy.REPLACE)

推荐阅读