Firebase字段检查逻辑异常:无论是否含DEFAULT均显示对话框
解决对话框始终显示的数据库字段检查问题
嘿,我帮你梳理下这个问题——你现在的核心问题是不管数据库里有没有DEFAULT值,对话框都一直显示,大概率是字段检查的逻辑出了问题,尤其是needInfo这个标记的处理上。
首先,咱们先明确正确的逻辑应该是:
- 默认不显示对话框(
needInfo初始为false) - 遍历所有10个用户字段,只要找到一个值为
DEFAULT的字段,就把needInfo改成true - 最后根据
needInfo的状态来控制对话框的显示或隐藏
我猜你的原始代码可能犯了这几个错误之一:
needInfo初始值设成了true,导致即使没有DEFAULT字段,也会保持true- 遍历的时候判断条件写反了(比如写成了
!equals("DEFAULT")才改状态) - 没有遍历完所有字段就提前退出了,或者没正确处理所有子节点
下面是修正后的完整代码,你可以参考:
mUserDatabaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // 初始化为false:默认没有DEFAULT字段,不显示对话框 boolean needInfo = false; // 遍历所有用户字段子节点 for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { String fieldValue = childSnapshot.getValue(String.class); // 检查当前字段是否为DEFAULT(注意大小写匹配,要是需要忽略大小写可以用equalsIgnoreCase) if ("DEFAULT".equals(fieldValue)) { needInfo = true; // 找到一个就可以提前退出循环,不用再检查剩下的字段了 break; } } // 控制对话框的显示/隐藏 if (needInfo) { yourDialog.show(); } else { // 隐藏前先判断对话框是否正在显示,避免抛出异常 if (yourDialog.isShowing()) { yourDialog.dismiss(); } } } @Override public void onCancelled(DatabaseError databaseError) { // 别忘了处理数据库读取失败的情况,比如打个日志 Log.e("DatabaseCheck", "读取用户字段失败", databaseError.toException()); } });
另外,你还可以做几个排查来确保没问题:
- 检查数据库里的字段值是不是严格的字符串
"DEFAULT"(别是小写或者带空格的版本) - 在遍历的时候加个日志,打印每个字段的键和值,确认是不是正确读取了所有10个字段:
Log.d("FieldDebug", "字段名:" + childSnapshot.getKey() + " 值:" + childSnapshot.getValue()); - 确认没有其他代码在强制调用对话框的
show()方法,覆盖了这里的逻辑
内容的提问来源于stack exchange,提问作者Boris Ruzanov
相关产品推荐
相关产品推荐

