所以我的应用程序有一个超级简单的多人游戏。当玩家玩的游戏结束时,布尔值gameFinished
变为true。游戏中发生的大多数事情都首先检查以确保gameFinished
等于false,这就是我的问题所在。游戏结束后,我的布尔值明确设置为true,Log返回false
,以便游戏不断循环播放。
所以这是获取游戏结果的方法
private void getResults() {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
games.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
HomePage.getUserPosition(new HomePage.CallbackPosition() {
@Override
public void onSuccess(int position) {
if (dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false)) {
if (position == 1) {
if (youWin()) {
getWinner(FirebaseAuth.getInstance().getUid(), wager);
Log.i("FlipCoin", dataSnapshot.child(currentGameID).child("gameFinished").getValue().toString());
} else {
getLoser(FirebaseAuth.getInstance().getUid(), wager);
}
}
endGame();
}
}
});
}
抱歉,该方法中有很多草率的代码。
但是我在那里排队,
if (dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false)) {
这将检查游戏是否结束,如果尚未结束,则会在游戏结束时找到赢家或输家。
但是,一旦游戏结束,并且使用此方法找到了获胜者和失败者,该方法就会循环并一遍又一遍地运行,因为它认为gameFinished
等于{{1} }。
我有一个false
方法,发生在此endGame()
方法的结尾
getResults()
在这种方法中,我显然使用此行将 private void endGame() { HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
games.child(currentGameID).child("gameFinished").setValue(true);
games.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.i("FlipCoin", dataSnapshot.child(currentGameID).child("gameFinished").getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
}
设置为true
gameFinished
它反映在我的实时数据库中,就像这样
从视觉上讲,这是事实。而且我在endgame()方法中也有一条log语句,该语句返回games.child(currentGameID).child("gameFinished").setValue(true);
,因此根据该log语句,布尔值应为true
但是我的true
方法中也有log语句,即使布尔值很明显,该日志也返回false
有人可以帮助我解决这个奇怪的问题吗?
这显示了logcat如何反复地从false切换为true,这毫无意义
答案 0 :(得分:1)
您将真值与假值进行比较。因此它返回false。像这样:
true.equals(false)
返回false。
将您的代码更改为以下代码行:
if(dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false))
对此:
if((Boolean)dataSnapshot.child(currentGameID).child("gameFinished").getValue())
答案 1 :(得分:0)
由于布尔值“ gameFinished”默认初始化为false,因此会出现问题 将“ gameFinished”设置为true后,您需要检查getResults()方法