当前位置: 首页 > 面试题库 >

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

呼延运恒
2023-03-14
问题内容

我在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数据库,没有其他方法。



 类似资料:
  • 问题内容: 我想从我的Node.js应用程序中的Mongoose设置中检索一些数据。我注意到,无论我写什么作为字段选择,我总是会得到该字段。有没有一种方法不可以获取它?我现在是这样的: 并记录下包含该字段的结果。 问题答案: 必须明确排除。例如,

  • 我们想要自己的db连接配置而不是使用JNDI,但同时,我们也想使用DataSource而不是使用Drive verManager,怎么做?

  • 我正在尝试从FireBase获取所有用户的名称,该名称包含给定的字符串。例如,如果我有这些用户: 我希望所有用户的名称都包含'D',因此我希望得到这样的结果: 这是我的Firebase目前的结构: 2)现在我不想有服务器端代码,什么是实现自定义索引的好的和有效的方法? 谢谢

  • 问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1

  • 问题内容: 我正在学习使用Selenium(v2.20)来领先一些 即将使用它创建浏览器测试的程序员。我想在 陷阱到达之前发现它们,而我却跌入了一个陷阱。 当我创建ChromeDriver时,它始终会弹出“ Google Chrome EULA”并 显示两个按钮:“接受并运行”和“取消”。因为我希望这是一个 自动化测试,所以让用户单击按钮是不可能的。 我查看了Chromium CommandSwi