从firebase实时数据库检索数据

vnzz0bqm  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(431)

此问题已在此处找到答案

如何作为方法的结果返回datasnapshot值((6个答案)
getcontactsfromfirebase()方法返回空列表(1个答案)
在firebase侦听器中设置singleton属性值(3个答案)
五天前关门。
我需要返回从firebase读取的数据。代码如下:

private String getInfo(DatabaseReference reference) {
   String string = "";
   reference.child("xxx").addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
       string = snapshot.getValue().toString();
       // here the log display the correct value I need
       Log.i("Log", string);  
   }

   onCancelled() ...
   }
});
return string; // HERE THE VALUE IS NULL!!!!

如上所述,日志显示正确的值,但当我尝试返回它时,它的值变为null。

gg0vcinb

gg0vcinb1#

它在内部块中,这就是为什么它会将返回函数移动到块的内部,以便显示正确的值

kx5bkwkv

kx5bkwkv2#

首先尝试移动 return string; 在方法体内部,如果没有帮助,请阅读下面的内容。 addListenerForSingleValueEvent() 立即执行ondatachange方法,在执行该方法一次后,它停止侦听它所附加到的引用位置。
所以用 addValueEventListener() ,它将继续侦听它所附加的查询或数据库引用,如本文所述,在android上读写数据
以下是官方文件中的另一个有用信息:
侦听器接收一个datasnapshot,其中包含事件发生时数据库中指定位置的数据。对快照调用getvalue()将返回数据的java对象表示形式。如果该位置不存在数据,则调用getvalue()将返回null。
在本例中,valueeventlistener还定义了oncancelled()方法,该方法在读取被取消时调用。例如,如果客户端没有从firebase数据库位置读取的权限,则可以取消读取。此方法被传递一个databaseerror对象,该对象指示发生故障的原因。

相关问题