布尔值明确为真时返回false

时间:2018-12-06 02:48:29

标签: java android firebase firebase-realtime-database

所以我的应用程序有一个超级简单的多人游戏。当玩家玩的游戏结束时,布尔值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

它反映在我的实时数据库中,就像这样

enter image description here

从视觉上讲,这是事实。而且我在endgame()方法中也有一条log语句,该语句返回games.child(currentGameID).child("gameFinished").setValue(true);,因此根据该log语句,布尔值应为true

但是我的true方法中也有log语句,即使布尔值很明显,该日志也返回false

有人可以帮助我解决这个奇怪的问题吗?

这显示了logcat如何反复地从false切换为true,这毫无意义

enter image description here

2 个答案:

答案 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()方法