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/58579057/

相关文章:

java - Java 中的 SVG 验证

java - 将 jakarta.mail 1.6.5 更新到 2.0.1

java - 如何在 Java 中创建全局可用的库?

java - 为什么此 Function<List<Person>,String> 不起作用?

android - 在 Kotlin 中将单例服务转换为对象会使我的应用程序崩溃

sql - Postgres 通过 ODBC 查询慢了一个数量级?

python - Pandas dataframe - 选择一列值包含字符串而另一列值以特定字符串开头的行

java - 如何获取一天中的所有毫秒?

java - getGlobalVisibleRect 当前可见屏幕

.net - 用于 VS11 开发人员预览版的 MySQL 提供程序