Итак, у меня есть супер простая многопользовательская игра для моего приложения.И когда игра, в которую играют игроки, заканчивается, логическое значение gameFinished
становится истинным.Большинство вещей, которые происходят в игре, сначала проверяют, чтобы убедиться, что gameFinished
равно ложному, и вот тут-то и возникает моя проблема. После того, как игра закончена, и мой логический тип явно установлен в 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)) {
Это проверяет, завершена ли игра, и если она не закончена, то победитель или проигравший будет найден в концеgame.
Однако, как только игра окончена, и с помощью этого метода найдены победитель и проигравший, метод зацикливается и продолжает повторяться снова и снова, потому что считает, что gameFinished
равно 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) {
}
});
}
});
}
И в этом методе я ясно установил gameFinished
в true, используя этострока games.child(currentGameID).child("gameFinished").setValue(true);
и это отражается намоя база данных в реальном времени, которая выглядит следующим образом

Итак, визуально это правда.У меня также есть оператор log в моем методе endgame (), который возвращает true
, поэтому в соответствии с оператором log логическое значение должно быть истинным
Но у меня также есть операторы log в моем методе getResults()
, иэтот журнал возвращает ложь, хотя логическое значение явно истинно
Кто-нибудь может мне помочь с этой странной проблемой?
Это показывает, как logcat переключается с ложного на истинное снова и снова, что не 'не имеет никакого смысла
