未知的uid后,firebase从uid获取值

时间:2019-06-23 09:26:38

标签: android firebase firebase-realtime-database

CABARAN是未知的Uid。它不是文本。现在,我有了uid,并且想要获得tajukPenuh的价值。

Figure 1: Database

这是代码,我仍然无法获取值。

FirebaseDatabase.getInstance().getReference().child("karangan").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot child : dataSnapshot.getChildren()) {

                Karangan karangan = child.child(karanganID).getValue(Karangan.class);

                if (karangan != null) {
                    String tajukPenuh = karangan.getTajukPenuh();

                    holder.getTextViewKaranganID().setText("Karangan Tajuk: " + tajukPenuh);

                }
            }

        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

1 个答案:

答案 0 :(得分:2)

理论上,您可以执行以下查询:

srcip=<ipv4>

但是问题是您的规则中需要大量索引,这在技术上可能是可行的,但对于大多数实际用法而言是不可行的。

您当前的数据结构使查找FirebaseDatabase.getInstance().getReference().child("karangan") .orderByChild("-LYgFIl4Xiv_Ls51Slvh/uid").equalTo("-LYgFIl4Xiv_Ls51Slvh") .addListenerForSingleValueEvent(new ValueEventListener() { 的所有子节点变得容易,但是对于给定的子节点却不容易找到CABARAN。为了使用例有效运行,您应该使用所谓的反向索引扩展数据结构,该反向索引将从您知道的值映射回CABARAN。像这样:

CABARAN

这是一个附加的数据结构,在写入其余数据时必须保持最新状态。但是通过这种结构,现在很容易确定"myIndex": { "-LYgFIl4Xiv_Ls51Slvh": "CABARAN", "-LzfFIl4Xasas51Slads": "CABARAN", "-Lasddas981398asdh1h": "CASITWO" } 映射到-LYgFIl4Xiv_Ls51Slvh

有关此的更多信息,请在这里查看我的答案:Firebase query if child of child contains a value