【问题标题】:Query child value when you don't know parent Key不知道父键时查询子值
【发布时间】:2018-07-10 19:07:37
【问题描述】:

我正在尝试查询子节点值,但我不知道父键,我想查询 Firebase 适配器。我想访问区域下的用户 ID 节点,但我不知道父级的 ID,即 -KqPJMsjSb5CbPcq4nXv 这是记录的快照:

【问题讨论】:

  • /areas 下似乎有两个动态/按钮。 Firebase 实时数据库查询在节点的平面列表上工作,并在每个直接子节点下的固定位置对值进行排序/过滤。见stackoverflow.com/questions/27207059/…

标签: android firebase firebase-realtime-database firebaseui


【解决方案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 数据库执行查询时,可能会有多个结果。 所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。

【讨论】:

  • 你@AlexMamo说的解决方法不行,别忘了area后面有个关键节点
  • 你为什么这么说,你测试过吗?我可以说它肯定会起作用。正如您可能看到的,DatabaseReference userIdRef 是rootRef.child("areas").child(userId),这意味着我们在树中找到了userId 节点。使用getChildren() 意味着我们正在从那里获取所有孩子。因为在这个护理中只有一个孩子,我们可以从那个节点获得所有孩子,areaId, booked, bookingHour and so on
猜你喜欢
  • 2016-06-12
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多