Java 带房间持久性库的Firebase

Java 带房间持久性库的Firebase,java,android,firebase,firebase-realtime-database,android-room,Java,Android,Firebase,Firebase Realtime Database,Android Room,我正在考虑从Firebase获取数据,并使用room library将其存储在手机上。但是,我心里有一个疑问。我想使用FirebaseChildEventListener,因为我只想在更改或添加孩子时获取数据。但是,我也知道ChildEventListener会在应用程序第一次启动时获取所有数据。所以,我的问题是,在什么情况下firebase ChildEventListener将获取整个数据,在什么情况下只获取一个孩子?。实际上,了解这一点很重要,因为如果ChildEventListener两

我正在考虑从Firebase获取数据,并使用room library将其存储在手机上。但是,我心里有一个疑问。我想使用Firebase
ChildEventListener
,因为我只想在更改或添加孩子时获取数据。但是,我也知道ChildEventListener会在应用程序第一次启动时获取所有数据。所以,
我的问题是,在什么情况下firebase ChildEventListener将获取整个数据,在什么情况下只获取一个孩子?
。实际上,了解这一点很重要,因为如果ChildEventListener两次获取相同的数据,room将给出唯一的id复制错误。

如果您无法控制ChildEventListener何时触发,一个简单的策略是在所有情况下都进行覆盖。您可以使用以下代码避免唯一id重复错误:

@Insert(onConflict = OnConflictStrategy.REPLACE)

如果替换不适合您,则有。

如果您无法控制何时启动ChildEventListener,那么一个简单的策略就是在所有情况下都进行覆盖。您可以使用以下代码避免唯一id重复错误:

@Insert(onConflict = OnConflictStrategy.REPLACE)
如果replace不适合您,则可以使用实现接口的类来接收有关给定数据库引用的子位置中的更改的事件。仅当您希望响应子级更改时,才应使用此接口,因为此接口在添加、删除、更改或移动子级时有单独的方法(
onchildaded()
onChildRemoved()
onChildChanged()
onChildMoved()

在什么情况下firebase ChildEventListener将获取整个数据,在什么情况下仅获取一个子数据

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

实现接口的类可用于接收有关给定数据库引用的子对象位置更改的事件。仅当您希望响应子级更改时,才应使用此接口,因为此接口在添加、删除、更改或移动子级时有单独的方法(
onchildaded()
onChildRemoved()
onChildChanged()
onChildMoved()

在什么情况下firebase ChildEventListener将获取整个数据,在什么情况下仅获取一个子数据


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

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

@Entity(tableName=“post”,Index=@Index(value={“id”},unique=true))


在模型类中,可以将“id”指定为唯一的,这样相同的数据就不会多次存储。请记住一点:不要提供唯一的主键,您必须为您的房间数据库提供单独的id。希望它能帮助您:)

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

@Entity(tableName=“post”,Index=@Index(value={“id”},unique=true))

在模型类中,可以将“id”指定为唯一的,这样相同的数据就不会多次存储。请记住一点:不要提供唯一的主键,您必须为您的房间数据库提供单独的id。希望它能帮助你:)