全局布尔值在 addListenerForSingleEventValue 函数内设置,但在以下 if 语句中无法识别 [重复]

Posted

技术标签:

【中文标题】全局布尔值在 addListenerForSingleEventValue 函数内设置,但在以下 if 语句中无法识别 [重复]【英文标题】:global boolean value is setting inside addListenerForSingleEventValue function, but not recognized in following if statement [duplicate] 【发布时间】:2019-05-06 13:08:13 【问题描述】:

我正在 firebase 中的一些子项中循环查看某个键的值是否存在,并且在我的 addListenerForSingleValueEvent 函数中找到了该键并将全局布尔值设置为 true。但是,在函数之后,变量被设置为 false,因此程序不会进入第二个 if 语句。

referenceClasses.addListenerForSingleValueEvent(new ValueEventListener() 
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) 
                            if (snapshot.getKey().compareTo(combinedString) == 0) 
                                found = true;
                                break;
                            
                        
                    

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError)  
                );

                if(found) 
                   //...
                

我知道在 addListenerForSingleValueEvent 中通过对我的数据库的各种输入将 found 设置为 true。布尔值被实例化为

boolean found;

全局,在任何其他功能之前。我什至尝试实现两个函数,一个设置布尔值,另一个返回它,但我最终得到了相同的结果,布尔值在 addListenerForSingleValueEvent 中为真,在 if 语句中为假。有什么想法吗?

【问题讨论】:

AvidRP 的回答确实是原因:您的if(found) 现在在onDataChange 运行之前运行,所以found 尚未设置。您无法使代码正常工作(或者至少不会在 android 对您的应用程序不满意的情况下)。但是还有其他方法,如我的回答所示:***.com/questions/50434836/… 【参考方案1】:

发生这种情况是因为 firebase 调用是异步的,因此您的程序甚至可能在进入 onDataChange() 方法之前就遇到了 if 块。要查看是否是这种情况,您可以在 onDataChange 中放置一个断点并在 if(found) 行上放置一个断点,然后查看哪个首先执行。

如果您要做的只是在找到设置为 true 后执行某些代码,那么您应该将整个 if 块移动到 onDataChange 中。

希望这会有所帮助!

【讨论】:

以上是关于全局布尔值在 addListenerForSingleEventValue 函数内设置,但在以下 if 语句中无法识别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

布尔值在活动中第一次返回 false [重复]

具有多个值的张量的布尔值在 Pytorch 中不明确

Laravel 布尔值在查询中返回“1”/“0”而不是 true/false

如何通过布尔值在播放视图模板中呈现不同的 html 元素?

java布尔值在被调用方法中没有改变[重复]

如何使用布尔值在 ant design 复选框中呈现默认值?