我当时正在考虑从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复制错误。
答案 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。希望对您有帮助:)