【问题标题】:How to receive data from Firebase that has specific String android如何从具有特定字符串 android 的 Firebase 接收数据
【发布时间】:2017-06-19 13:24:27
【问题描述】:

我的数据结构如下:

Database
 Data1 { 
   Family: "Adam, John, Smith, Bob, Alice"
   Age: "12, 23, 6, 5, 8"
   Area: "GT6, GT9, GT12"
}

 Data2 { 
   Family: "Tom, Ben, Berry, Hosh, Nico"
   Age: "68, 43, 26, 15, 18"
   Area: "67D, HG6, DHJD, 453"
}
 Data3 { 
   Family: "Alice, Karan, faser, jenny, kietty"
   Age: "14, 10, 15, 17, 5"
   Area: "HG6, 67D, DHJD"
}

我只想打印/检索包含例如区域“67D”的数据,在此我想打印数据 2 和 3 中的所有数据。

如果我的问题不清楚,请告诉我。

我试过了

Query queryRef = ref.orderByChild("Area").equalTo("67D");
queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
        System.out.println(snapshot.getKey());
    }
    // ....
});

【问题讨论】:

  • Firebase 数据库没有等效的 SQL LIKE 操作。如果您想将一个项目与多个值相关联,您实际上是在尝试创建一个分类系统。在此处查看我的答案以获得更具可扩展性的解决方案:stackoverflow.com/questions/40656589/…

标签: android sorting firebase firebase-realtime-database


【解决方案1】:

根据 Kato 的 this SO answerthis Firebase blog post,无法通过子字符串匹配进行过滤。

考虑让孩子将区域作为键,然后您的查询将起作用:

ref.orderByChild("Area").equalTo("67D");

【讨论】:

  • 你的意思是像区域:“523”,区域“84G”等
  • 类似于areas: { "532": true, "84G": true, ... }
【解决方案2】:

您可以遍历所有数据并通过检查每个区域是否包含您想要的字符串来找到匹配的区域。 考虑到ref 是您的数据库参考:

ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    DataSnapshot area = dataSnapshot.child("Area");
    String area_value = area.getValue().toString();
    if(area_value.contains("67D")){
        System.out.println(dataSnapshot.toString());
    }
}

【讨论】:

  • 嗨,这是否允许我打印包含该值的所有数据。例如,数据 2 和 3 中的所有数据?
  • dataSnapshot 是您的 Data2/3/etc。对象,所以你可以用它做任何你想做的事情。
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多