我在 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()
,它将仅查询该引用一次,然后从中分离。因此,如果您每次打开 Activity 时都执行此操作,您每次都会获得更新的值。
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) {}
});
但是您必须使用事件监听器来读取 Firebase 数据库,没有其他方法。
关于java - 如何在没有 EventListener 的情况下从 Firebase 检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58579057/