Android Firebase通过子搜索获取单个节点值

时间:2018-06-02 00:45:07

标签: android firebase firebase-realtime-database

您好这是我的firebase我正在尝试进行查询

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

我试图通过搜索“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 .....)

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

1 个答案:

答案 0 :(得分:0)

对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());
  }
}

另见: