首页 > 解决方案 > Android Firebase 通过子搜索获取单节点值

问题描述

你好这是我的firebase我正在尝试查询

https://i.stack.imgur.com/Ldexn.png

我试图通过搜索 where "name" = "Cafe" 来获取孩子 "02" 的值

        category.orderByChild("name").equalTo("Cafe").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Category catx = dataSnapshot.getValue(Category.class);

            Toast.makeText(AdminCategories.this, "xx"+catx.getName(), Toast.LENGTH_SHORT).show();

            admCatId.setText(dataSnapshot.getKey());
            admCatName.setText(catx.getName());
            admCatImage.setText(catx.getImage());
        }

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

        }
    });

但是我使用这段代码得到了 null ..

当我使用时,我得到了想要的结果

category.child("02").addValueEventListener(new .....)

请注意,我不使用任何适配器或列表,我只需要通过名称搜索来获取单个孩子的结果..

标签: androidfirebasefirebase-realtime-database

解决方案


当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

onDataChange需要处理该列表,它目前没有。最简单的更改是迭代dataSnapshot.getChildren()

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  for (DataSnapshot categorySnapshot: dataSnapshot.getChildren()) {
    Category catx = categorySnapshot.getValue(Category.class);

    Toast.makeText(AdminCategories.this, "xx"+catx.getName(), Toast.LENGTH_SHORT).show();

    admCatId.setText(categorySnapshot.getKey());
    admCatName.setText(catx.getName());
    admCatImage.setText(catx.getImage());
  }
}

另见:


推荐阅读