android - 将数据推送到 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 它工作正常。如果我将代码放在活动或片段中,同样的事情会给我同样的问题。
解决方案
简单的解决方案是在您的 Dao 函数中的 Insert 函数之上添加以下代码
@Insert(onConflict = OnConflictStrategy.REPLACE)
推荐阅读
- php - 使用个人名称获取 json_decode 的值
- c# - 无法加载文件或程序集'System.Data.SqlClient,版本 = 4.4.0.0
- django - 失败的 hstore 测试 Django
- java - 获取字符串长度
- javascript - 在浏览器中填写 pdf 表单的工具
- python - Python urllib - 多处理中的虚假传入数据包丢失
- python - 在 Tkinter 的类之间传递值
- c# - 如何在 SQL 表中搜索特定列
- c++ - 了解没有可读取内容时的 boost::asio async_read 行为
- php - 无法将序列化的表单数据从 ajax 请求解析到 php 数组