在Android中根据字段查询Firebase并返回父级

时间:2017-04-25 18:24:05

标签: android firebase firebase-realtime-database

我正在搜索我的Firebase数据库并找到一个字段:与我的查询匹配的值配对,然后返回该父项的键或父对象,以便我也可以获取其他信息。

Firebase数据库看起来像这样:

Events{
  -KiXlIGhB6k-HpCKfO3n{
    name:"Breakfast at Tiffany's",
    owner:"Tim",
    startTime:{
      startHour:1,
      startMinute:30
    },
    ...
  },
  -dFgfh8Efa-Hpwe6Goqp0{...}
}

我目前正在尝试:

public void importSchedule(String ownerName){
DatabaseReference events = 
FirebaseDatabase.getInstance().getReference("Events"); //Inside the Events list

Query allOwnersEvents = events.equalTo(ownerName); //Find events equalTo ownerName provided

allOwnersEvents.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot post : dataSnapshot.getChildren()) {
           // This is where the parent's could be queried, all events belonging to an "owner" should be cycled through
        }
    }
    public void onCancelled(DatabaseError databaseError) {}
});

但是,当在for循环中放置断点时,它永远不会被触发。我想知道我是否正确地尝试了查询,或者是否有更简单的方法来完成此任务。

1 个答案:

答案 0 :(得分:1)

由于您的DatabaseReference错误,因此从未触发过。当您查询时,您错过了一个孩子。为了获得正确的DatabaseReference,请使用以下代码:

    DatabaseReference events = FirebaseDatabase.getInstance().getReference("Events")
    events.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String eventKey = ds.getKey(); //parent key

            DatabaseReference allOwnersEvents = FirebaseDatabase.getInstance().getReference("Events").child(eventKey);
            allOwnersEvents.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String ownerName = dataSnapshot.child("ownerName").getValue(String.class); //do what you want with ownerName
                }
                public void onCancelled(DatabaseError databaseError) {}
            });
        }
    }
    public void onCancelled(DatabaseError databaseError) {}
});

其中eventIdpush()方法生成的唯一ID。希望它有所帮助。