【发布时间】:2017-10-09 11:51:45
【问题描述】:
假设我从 firebase 获取数据
DatabaseReference mdb=FirebaseDatabase.getInstance().getReference("users/"+id);
mdb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name=dataSnapshot.child("name").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//point b
它运行良好.... 如果我尝试使用
打印该字符串名称@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name=dataSnapshot.child("name").getValue();
System.out.println(name);
}
它将打印该字符串。 但是如果我想在侦听器之外使用该字符串名称怎么办,例如在第一个代码中我添加了注释 //point b
我尝试在全局范围内定义字符串名称。 但它只打印 onDatachange() 内部的 println... 但它会在 //point b 打印 null ...即使我在全局范围内定义了字符串名称。
喜欢
String name;
DatabaseReference mdb=FirebaseDatabase.getInstance().getReference("users/"+id);
mdb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
name=dataSnapshot.child("name").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//point b
编辑 实际上它是一个返回字符串值的函数,例如
public String getData(String id)
{
String name;
DatabaseReference mdb=FirebaseDatabase.getInstance().getReference("users/"+id);
mdb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
name=dataSnapshot.child("name").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return name;
}
【问题讨论】:
-
它的打印
null值因为 Firebase 监听器是异步的 -
是什么意思?我不能在外面打印吗?
-
您的打印代码在 firebase 监听器返回值之前执行
-
@Shruti 感谢您的指出,抱歉我刚刚改错了
-
请指点我,我应该在哪里写println代码
标签: android firebase firebase-realtime-database