Boolean возвращает false, когда это явно верно - PullRequest
0 голосов
/ 06 декабря 2018

Итак, у меня есть супер простая многопользовательская игра для моего приложения.И когда игра, в которую играют игроки, заканчивается, логическое значение 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);

и это отражается намоя база данных в реальном времени, которая выглядит следующим образом

enter image description here

Итак, визуально это правда.У меня также есть оператор log в моем методе endgame (), который возвращает true, поэтому в соответствии с оператором log логическое значение должно быть истинным

Но у меня также есть операторы log в моем методе getResults(), иэтот журнал возвращает ложь, хотя логическое значение явно истинно

Кто-нибудь может мне помочь с этой странной проблемой?

Это показывает, как logcat переключается с ложного на истинное снова и снова, что не 'не имеет никакого смысла

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы сравниваете истинное значение с ложным.поэтому он возвращает ложь.как это:

true.equals(false)

, который возвращает false.

Измените свой код на эту строку кода:

if(dataSnapshot.child(currentGameID).child("gameFinished").getValue().equals(false))

на это:

if((Boolean)dataSnapshot.child(currentGameID).child("gameFinished").getValue()) 
0 голосов
/ 06 декабря 2018

Проблема возникает из-за того, что логическое значение "gameFinished" по умолчанию инициализировано как false. Вам нужно проверить метод getResults () после того, как для вашего "gameFinished" установлено значение true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...