gpt4 book ai didi

java - 如何从 onDataChange 函数设置全局变量

转载 作者:行者123 更新时间:2023-12-02 12:06:26 28 4
gpt4 key购买 nike

我在我的项目中使用 firebase,我试图找出如何解决下一个问题几个小时,但没有成功,我有下一个代码:

// gameIDperm is set as 0 as default
public void GenerateID(){
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if(snapshot.hasChild(gameIDperm))
{
gameIDperm = Integer.toString(Integer.parseInt(gameIDperm)+1);
Log.d("ID XXXX" , gameIDperm); // Here it says the right number
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
Log.d("ID YYYYYYYY" , gameIDperm); // Here it says gameIDperm is 0 again

}

如何使变量保存在当前函数中并且不会再次重置为默认值?

希望能帮到你!

最佳答案

Firebase 监听器内部的代码是一个回调,它将在将来的某个时刻被调用,但没有指定何时发生。

所以发生的事情是:

  1. 您调用ref2.addListenerForSingleValueEvent(..)
  2. 你执行Log.d("ID YYYYYYYY", gameIDperm);,此时变量还没有改变。
  3. Firebase 稍后调用 onDataChange(..),更改变量。
  4. 您执行Log.d("ID XXXX", gameIDperm);

在这样的异步执行中,您不能依赖代码的顺序来告诉您何时执行。

此外,您还使用变量 gameIDperm 来查找 firebase 引用的子级,然后用内容重写该变量。这可能不正确。

关于java - 如何从 onDataChange 函数设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46878738/

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