Sal*_*Sea 4 java android firebase firebase-realtime-database
这只是我的代码的一个示例。现在,如果我在onDataChange中打印出userName变量,它可以正常工作。但是,如果我尝试在外部输出userName,则在侦听器之后,它将输出'null'。如何在onDataChange()中存储所需的变量和变量?
public class FireBaseTest extends .... {
String userName;
...
mDatabase.child("Users").child(key).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get user value
userName = dataSnapshot.child("userName").getValue(String.class);
System.out.println(userName); //Not null
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
...
System.out.println(userName); //Null
Run Code Online (Sandbox Code Playgroud)
编辑/更新:因此,在我进行一个处理之前,该处理将采用被监听的值并对其进行处理。我只是对该过程进行了一些调整,并将其添加到onDataChanged方法中以结束痛苦。即使不完全令人满意,它仍然有效。谢谢所有回答的人。
Firebase中的侦听器是异步的,因此您不能设置这样的变量。您应该在声明了侦听器的函数中传递一个回调函数。
然后,此回调函数将从firebase调用中获取结果,并对其进行进一步处理。
public void doSomething(@NotNull final Callback callback) {
final Query query = mDatabase.child(FirebaseConstants.TARGET);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userName = dataSnapshot.child("userName").getValue(String.class);
callback.OnComplete(userName);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5902 次 |
| 最近记录: |