当前位置: 首页 > 知识库问答 >
问题:

如果给定字符串是给定firebase位置的子级,而不在firebase中下载整个datasnapshot,我如何获取布尔值?

陶琦
2023-03-14

如果给定的String是Firebase节点的子节点,我只需要获取true或false值,而不需要获取整个节点的整个DataSnapshot。这是为了降低Firebase实时下载的成本。

Firebase数据库结构

我所尝试的:

VillazRef.child(**UID2**).addListenerForSingleValueEvent(new ValueEventListener() {
                                                    @Override
                                                    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                                                    {
                                                        if (dataSnapshot.child(VISIBLE).hasChild("OMBsclV...0X6w2"))
                                                        {
                                                            bool=true;
                                                        }
                                                        if (dataSnapshot.child(INVISIBLE).hasChild("OMBsclV...0X6w2"))
                                                        {
                                                            bool=true;
                                                        }
                                                    }
                                                    @Override
                                                    public void onCancelled(@NonNull DatabaseError databaseError) {
                                                    }
                                                });

我认为这些cadesVillazRef.child(**UID2**). addListenerForSingleValueevent返回此位置的整个datasnapshot,但我不想这样,这完全是浪费我的带宽,所以我只需要像

if("OMBsclV...0X6w2" is within the VillazRef.child(**UID2**))
{
bool=true;
}
else
{
bool=false;
}

共有1个答案

柳昊焱
2023-03-14

你快到了。您所需要做的就是深入数据库层次结构。假设以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

将返回“cxhcK…kj433”作为登录用户(UID2)的UID,以检查“OMBsc…0X6w2”是否为“可见”节点的子节点,然后请使用以下代码行:

String uidToSearch = "OMBsc ... 0X6w2";
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidToSearchRef = rootRef.child("Villaz")
                                          .child(uid)
                                          .child("visible")
                                          .child(uidToSearch);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()) {
            bool = true;
        } else {
            bool = false;
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
uidToSearchRef.addListenerForSingleValueEvent(valueEventListener);

这样,您只能从数据库下载一个值,而不是从整个“可见”节点下载。但是,由于Firebase API是异步的,“bool”的值不能简单地在“onDataChange()”方法之外使用。为了能够在回调之外使用该值,请检查我在以下帖子中的答案:

  • 如何返回DataSnapshot值作为方法的结果?
 类似资料:
  • 问题内容: 很抱歉提出这样的问题,但我确实无法在Google中找到答案。假设我有一个课程,并且有一个字符串“ myColor”。现在,我想操纵属性。我怎样才能做到这一点? 编辑: 对不起,一个不清楚的问题,我想最好的方法是解释我需要什么。我有一个Swing表单,想在加载gui时使用首选项api设置字段的值。因此,我可以读取所有字段,然后对每个字段进行处理,但这似乎是不需要的编码,因此我想使用带有字

  • 问题内容: 为简单起见,这是我要执行的操作的简化版本: 我知道如何在PHP中执行此操作: 有什么办法吗? 问题答案: 如果是全局变量,则可以执行以下操作: 关于各种“ eval”解决方案的说明:你应谨慎使用eval,特别是如果要评估的字符串来自可能不受信任的来源-否则,你可能最终会删除磁盘的全部内容或类似内容如果给你一个恶意字符串。 (如果它不是全局的,那么你将需要访问其定义在其中的任何名称空间。

  • 问题内容: 我有两个字符串,我想检查第一个是否是另一个的子字符串。Python是否具有这样的内置功能? 问题答案: 尝试像这样使用:

  • 问题内容: 我想获取给定UTF-8字符串的UCS-2代码点。例如,单词“ hello”应变为类似“ 0068 0065 006C 006C 006F”的名称。请注意,字符可以来自任何语言,包括诸如东亚语言之类的复杂文字。 因此,问题归结为“将给定字符转换为其UCS-2代码点” 但是如何?拜托,由于我非常着急,任何帮助都将不胜感激。 提问者的答覆转录为答案 感谢您的答复,但这需要在PHP v 4或5

  • 问题内容: 从表单获取变量: 如果我输入1并使用gettype($ POST _ [‘a’]),它将返回字符串,可以输入int吗?因为在此之后,我要检查该变量是否为int。 更新 得到的答案是,它总是返回字符串,他们为我提供了使用(int)或intval()的方法,但是如果它真的像’a’这样的字符串,它会返回0,但它也可能是整数值0,如何克服这个问题? 更新 编辑错字后,Brad Christie

  • 问题内容: 我想获取给定日期字符串的格式。 示例:我有一个类似的字符串,并且该字符串的日期格式为。 在这里,当我将string()传递给将返回format()的方法时,我想找出这种日期格式,然后稍后根据我的require()格式化给定的日期字符串。 谁能告诉我如何实现? 问题答案: