我在Android应用上使用Firebase,我知道如何使用EventListener从数据库中获取数据。到目前为止。
我的问题是:我有一个ReciclerView,它显示来自数据的信息,但仅在我修改数据库时。如果我关闭应用程序并再次打开,则不会显示任何内容。然后,我修改了一些东西,并在容器中显示了我的所有元素。
有没有办法加载这些数据没有等待事件,但手动获取?
先感谢您。
更新1(这是我的代码,它完美地工作):
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listaDeLyrics.clear();
for (DataSnapshot lyricFromFB : dataSnapshot.getChildren()){
LyricCard lc = lyricFromFB.getValue(LyricCard.class);
listaDeLyrics.add(lc);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我想在不使用EventListener的情况下获取数据。
解决方案:我在创建RecyclerView之前修复了从数据库中保存数据的问题。似乎没有显示任何内容,因为列表是空的(但我不明白为什么它没有响应列表中的更改)
注意:addValueEvent也是第一次工作,甚至不修改任何东西。它在声明时获取信息,然后在事件发生时获取信息。 singleValueEvent的工作原理完全相同,它只执行一次,只听到第一个事件。
我希望这也可以帮助某人。
发生这种情况可能是因为您正在使用addValueEventListener()
,它将向引用添加侦听器并侦听该引用(路径)中的更改。
我建议使用addListenerForSingleValueEvent()
,它只会查询该引用一次,然后从中删除它。因此,如果您每次打开活动时都这样做,那么每次都会有更新的值。
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//parse data to recycler view adapter and call notifyDatasetChange()
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
但是,您必须使用eventlisteners来读取您的firebase数据库,没有别的办法。
要解决这个问题,请使用addListenerForSingleValueEvent
而不是addValueEventListener
。每当数据库发生变化时,都会触发ValueEventListener
。
更改此设置并尝试在onDataChange()
方法中打印结果。
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot lyricFromFB : dataSnapshot.getChildren()){
LyricCard lc = lyricFromFB.getValue(LyricCard.class);
Log.d("TAG", lc.getLyricCardName());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我使用了以下代码行:
Log.d("TAG", lc.getLyricCardName());
假设你有一个名为getLyricCardName()
的吸气剂。
从qazxsw poi请看:
addListenerForSingleValueEvent(ValueEventListener listener) - 为此位置的数据中的单个更改添加侦听器。
addValueEventListener(ValueEventListener listener) - 为此位置的数据更改添加侦听器。
还有一件事,没有办法可以在不使用监听器的情况下检索数据。 Firebase中的所有内容都与听众有关。
您可以使用firebaseUI直接从firebase数据库中将数据提取到recyclelerview中。 EventListeners不是必需的,只需通过调用适配器来获取数据:
adapter.startListening();
您可以在此处获取完整的文档。 official documentation
您可能正在监听子事件,您应该https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md,它会返回一个可以循环的单个快照中的整个数据列表,与子事件相比,仅在添加/更新子项时触发。
UPDATE
如果你想获得没有任何EventListener的数据,那么只需使用listen for value events,它只获取一次数据并且不会监听任何其他事件。