如何在firebase Android中搜索Child的值

时间:2017-04-20 06:07:22

标签: android firebase firebase-realtime-database

enter image description here

DatabaseReference databaseReference=mDatabase;
        String queryText="Hotel";
        databaseReference.orderByChild("Coupon")
                .startAt(queryText)
                .endAt(queryText+"\uf8ff");
  

在这里,我附上了用于获取"优惠券"的儿童姓名的代码。当我进入" Hotel"在优惠券下查询。但我得到了空白。我应该得到Hotel1,Hotel2对象。我是firebase的新手。所以希望你的支持。谢谢你。

2 个答案:

答案 0 :(得分:2)

在Web版本中,他们使用名为ElasticSearch的东西,您可以尝试在此处阅读更多内容:https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html

但对于Android,我认为没有任何功能可以执行这样的搜索。我要做的是查询所有记录,然后自己过滤它们:

DatabaseReference databaseReference = mDatabase;
mDatabase.addValueEventListener(new ValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot val : dataSnapshot.getChildren()){
        //I am not sure what record are you specifically looking for
        //This is if you are getting the Key which is the record ID for your Coupon Object
        if(val.getKey().contains("Hotel")){
            //Do what you want with the record
        }

        //This is if your are querying for the hotel child
        if(val.child("hotel").getValue(String.class).contains("Hotel")){
            //Do what you want with the record
        }
    }
}
@Override
public void onCancelled(FirebaseError firebaseError) {

}

}

答案 1 :(得分:0)

不要加载整个数据库来过滤掉所需的数据。它产生不必要的流量,必须加载,计算和删除。相反,使用:

DatabaseReference myRef = FirebaseDatabase.getDatabaseReference();

Query searchQuery = myRef.child("Coupon").orderByChild("hotel").equalTo("yourSearchString");

要使此代码生效,您还必须在规则(Firebase数据库控制台)中的相应属性上添加indexOn