gpt4 book ai didi

java - 让 ValueListener 只发生一次

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

我想知道是否可以使值事件监听器中的代码仅发生一次。

我有一个值监听器,用于检查游戏中的 2 个玩家是否单击了“准备”按钮。如果有,那么监听器中的代码将会发生,这很好,但我只希望它发生一次。

问题在于,由于监听器中的条件为真,因此代码会一遍又一遍地执行。这是监听器的简化版本

   games.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
if(dataSnapshot.child(currentGameID.child("ready").getValue().equals(true)) {
runCounter();
Log.i("FlipCoin", "``ButtonClickListener happened");
}
}
});

一旦 if 语句中的条件为真,if 语句中的代码就会一遍又一遍地触发。我知道发生了这种情况,因为我在语句中放入了一条日志语句,并且它继续在日志中打印。

我怎样才能使该代码只触发一次,直到提示再次触发?我知道一种方法是在代码发生后立即将 if 语句中的条件设置为 false,但这会带来问题,因为我需要该值读取 true 才能使代码中的其他方法正常工作

最佳答案

调用后将其删除即可:

games.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
if (dataSnapshot.child(currentGameID.child("ready").getValue().equals(true))) {
runCounter();
Log.i("FlipCoin", "``ButtonClickListener happened");
}
}
});

games.removeEventListener(this); //remove it here
}
});

如果您需要重用此监听器,请将其分配给变量:

ValueEventListener listener = new ValueEventListener() {
//contents from above
}

然后只需使用:

games.addValueEventListener(listener);

只要你想让它工作。

关于java - 让 ValueListener 只发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53685593/

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