2017-08-01 34 views
0

我正在尝试查询子节点值,但我不知道父键,我想查询Firebase适配器。我想下面积访问用户ID节点,但我不知道父母即-KqPJMsjSb5CbPcq4nXv 这里的ID记录的快照: The area node have different Areas under a auto generated Id's 当您不知道父键时查询子值

回答

1

请使用此代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userIdRef = rootRef.child("areas").child(userId); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String areaId = ds.child("areaId").getValue(String.class); 
      Boolean booked = ds.child("booked").getValue(Boolean.class); 
      Integer bookingHour = ds.child("bookingHour").getValue(Integer.class); 
      //and so on 
      Log.d("TAG", areaId + "/" + booked + "/" + bookingHour); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
userIdRef.addListenerForSingleValueEvent(eventListener); 

在这userId是说,不缺少用户的ID。

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

+0

你@AlexMamo提到的解决方案无效,不要忘记区域后面有一个关键节点 – Pheonix

+0

你为什么这么想,你有没有测试它?我可以说它肯定会有效。正如你可能看到的那样,DatabaseReference userIdRef是'rootRef.child(“areas”)。child(userId)',这意味着我们在树的'userId'节点右下。使用'getChildren()'意味着我们从那里获取所有的孩子。因为在这个照顾下只有一个孩子,我们可以从该节点获得所有儿童,例如areaId,预订,预订时间等等。 –

+0

它工作吗,一切都好吗? –

相关问题