java - 如何在没有 EventListener 的情况下从 Firebase 检索数据?

标签 java android database firebase

我在我的 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/49083621/

相关文章:

java - Jersey REST 调用中的复杂查询

java - 与 TimerTask、Android 中的延迟参数相关的奇怪 IllegalArgumentException

Android admob 问题

asp.net - 在 asp.net 中连接 Flash 编程 SWF 文件并需要在数据中存储一些值

java - 使用 Apache POI 删除特定 Excel 工作表上的所有边框

android - 在 android 谷歌地图中更改 clustermanager 项目图标

php - 使用 php 将值插入 mysql

database - 查询 Excel 表格

database - 可调整的版本化图形数据库

java - == 或等于比较最终静态字段时