gpt4 book ai didi

java - 在 Firebase 的 onDataChange 中设置变量(单值监听器)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:51 25 4
gpt4 key购买 nike

这只是我的代码的示例。现在,如果我在 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

编辑/更新:因此,在我有一个流程可以获取正在倾听的值(value)并对其进行处理之前。我只是对该过程进行了一些调整,并将其添加到 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) {
}
});
}

关于java - 在 Firebase 的 onDataChange 中设置变量(单值监听器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com