我在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()它将向引用添加侦听器并侦听该引用(路径)中的更改。
addValueEventListener()
我建议使用addListenerForSingleValueEvent()它将仅查询该引用一次,然后从该引用断开。因此,如果每次您的活动打开时都执行此操作,则每次都会有更新的值。
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数据库,没有其他方法。