从 Firebase 实时数据库中检索数据

时间:2021-07-05 12:11:34

标签: java android firebase firebase-realtime-database null

我需要从 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!!!!

如上面所写,日志显示了正确的值,但是当我尝试返回它时,它的值变为空。

2 个答案:

答案 0 :(得分:0)

它在内部块内,这就是它发生的原因 将返回函数移动到块的内部,以便它显示正确的值

答案 1 :(得分:0)

首先尝试在方法主体内移动 return string;,如果它没有帮助,请阅读下文。

addListenerForSingleValueEvent() 立即执行 onDataChange 方法,在执行一次该方法后,它停止侦听它附加到的参考位置。

所以改用 addValueEventListener(),它会一直监听它所附加的查询或数据库引用,如这里所提到的 Read and Write Data on Android

这是官方文档中的另一个有用信息:

<块引用>

侦听器收到一个包含数据的 DataSnapshot 事件发生时数据库中的指定位置。打电话 快照上的 getValue() 返回对象的 Java 对象表示 数据。如果该位置不存在数据,则调用 getValue() 返回 空。

在这个例子中,ValueEventListener 还定义了 onCancelled() 取消读取时调用的方法。例如,读取可以 如果客户端无权读取,则取消 Firebase 数据库位置。这个方法被传递了一个 DatabaseError 指示失败原因的对象。