带有房间持久性库的Firebase

时间:2018-08-06 04:53:54

标签: java android firebase firebase-realtime-database android-room

我当时正在考虑从Firebase提取数据,然后使用会议室库将其存储在手机上。但是,我心中有一个疑问。我想使用Firebase ChildEventListener,因为我只想在更改或添加孩子时才获取数据。但是,我也知道,ChildEventListener会在首次启动该应用程序时获取所有数据。因此,my question is that in what cases firebase ChildEventListener will fetch whole data and in what cases a single child?。实际上,知道这一点很重要,因为如果ChildEventListener两次提取相同的数据,则房间将给出唯一的id复制错误。

3 个答案:

答案 0 :(得分:1)

如果您无法控制ChildEventListener何时触发,那么一种简单的策略是在所有情况下都将其覆盖。您可以使用以下代码避免唯一的ID复制错误:

@Insert(onConflict = OnConflictStrategy.REPLACE)

如果替换不适合您,则有other options

答案 1 :(得分:1)

实现ChildEventListener接口的类可用于接收有关给定数据库引用的子位置更改的事件。仅当您想响应子级更改时,才应使用此接口,因为该接口具有用于添加,删除,更改或移动子级的单独方法(onChildAdded()onChildRemoved(),{{1 }}和onChildChanged()

  

在什么情况下,firebase ChildEventListener将获取整个数据,在什么情况下将获取单个子项?

例如,onChildMoved()方法在启动应用程序以从特定位置获取所有子项时被调用一次,但每次在该位置添加新子项时也被调用。

答案 2 :(得分:0)

您可以使用以下代码删除重复的数据

@Entity(tableName = "post",indices = @Index(value = {"id"},unique = true))

在模型类中,可以给您的“ id”赋予唯一性,这样同一数据就不会多次存储。请记住,不要提供唯一的主键,而必须为房间数据库提供一个单独的ID。希望对您有帮助:)