此问题已在此处找到答案:
如何作为方法的结果返回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。
2条答案
按热度按时间gg0vcinb1#
它在内部块中,这就是为什么它会将返回函数移动到块的内部,以便显示正确的值
kx5bkwkv2#
首先尝试移动
return string;
在方法体内部,如果没有帮助,请阅读下面的内容。addListenerForSingleValueEvent()
立即执行ondatachange方法,在执行该方法一次后,它停止侦听它所附加到的引用位置。所以用
addValueEventListener()
,它将继续侦听它所附加的查询或数据库引用,如本文所述,在android上读写数据以下是官方文件中的另一个有用信息:
侦听器接收一个datasnapshot,其中包含事件发生时数据库中指定位置的数据。对快照调用getvalue()将返回数据的java对象表示形式。如果该位置不存在数据,则调用getvalue()将返回null。
在本例中,valueeventlistener还定义了oncancelled()方法,该方法在读取被取消时调用。例如,如果客户端没有从firebase数据库位置读取的权限,则可以取消读取。此方法被传递一个databaseerror对象,该对象指示发生故障的原因。