小编典典

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

java

我在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的工作原理完全相同,不同之处在于它只执行一次,只是监听了第一个事件。

我希望这也可以帮助某人。


阅读 219

收藏
2020-11-23

共1个答案

小编典典

之所以发生这种情况,可能是因为您正在使用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数据库,没有其他方法。

2020-11-23