2017-04-25 54 views
1

我正在寻找通过我的Firebase数据库进行搜索并查找匹配我的查询的字段:值配对,然后返回该父项的键或父对象,以便我也可以抓取其他信息。根据字段查询Firebase并在Android中返回父项

的火力地堡数据库看起来是这样的:

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

它从来没有被触发,因为你的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) {} 
}); 

在这eventId是由push()方法生成的唯一的ID。希望能帮助到你。

+0

如果我正在查看所有事件(而不仅仅是eventID指定的那个),该怎么办?我试图获得所有的ownerName里面的所有事件 –

+0

所以这是所有的事件,而不是一个。因为'eventId'是一个变量而不是单个值。如果我已经在你的代码中使用过,比如说,child(“ - KiXlIGhB6k-HpCKfO3n”)比只适用于单个事件。但这适用于所有事件。 –

+0

对不起,如果我误解了你,但是你说'child(eventID)'会查询我所有的事件吗?并将唯一键存储在eventID变量中?或者你是否说孩子(“ - KiXlIGhB6k-HpCKfO3n”)只会查询一个孩子。在这种情况下,我假设我没有我想要查询的事件的ID –