如何在Firebase Android中搜索一个值 [英] How to search for a value in firebase Android

查看:142
本文介绍了如何在Firebase Android中搜索一个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Firebase中保存了以下数据:



我想查找所有标题中有#Yahoo的记录。什么将是确切的查询呢?



我与创建的随机密钥混淆。我不知道如何处理这个,所以我张贴在这里。

  Firebase firebase =新的Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail)); 
Query queryRef = firebase.orderByKey()。startAt(#+ mHashTag).endAt(#+ mHashTag +\\\);

queryRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
mTasksList.clear();
mAdapter (DataSnapshot task:dataSnapshot.getChildren()){
mTasksList.add(task.getValue(TaskModel.class));
}
mAdapter中的.notifyDataSetChanged();
。 notifyItemRangeInserted(0,mTasksList.size());
mSwipeToRefresh.post(new Runnable(){
@Override
public void run(){
mSwipeToRefresh.setRefreshing(false) ;
}
});
}

@Override
public void onCancelled(FirebaseError firebaseError){
mSwipeToRefresh.post(new Runnable (){
@Override
public void run(){
mSwipeToRefresh.setRefreshing(false);
}
});
}
});


解决方案

包含 #Yahoo 。请参阅:
如何执行sqlLIKE在firebase上操作?



然而,您可以搜索以 #Yahoo

  

Query queryRef = firebase.orderByChild(title)。startAt(#+ mHashTag)

为了使这个工作正常,你必须添加一个您的Firebase规则的索引

 规则:{
userTasks:{
$ email:{
.indexOn:title//标题属性中的索引任务
}
}
}


I am saving data as follows in the Firebase:

I want to find all records that have #Yahoo in their title. What will be the exact query for that?

I am confused with the random key created. I am not sure how to handle this so i am posting it here.

Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));
        Query queryRef = firebase.orderByKey().startAt("#" + mHashTag).endAt("#" + mHashTag + "\uf8ff");

        queryRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mTasksList.clear();
                mAdapter.notifyDataSetChanged();
                for (DataSnapshot task : dataSnapshot.getChildren()) {
                    mTasksList.add(task.getValue(TaskModel.class));
                }
                mAdapter.notifyItemRangeInserted(0, mTasksList.size());
                mSwipeToRefresh.post(new Runnable() {
                    @Override
                    public void run() {
                        mSwipeToRefresh.setRefreshing(false);
                    }
                });
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                mSwipeToRefresh.post(new Runnable() {
                    @Override
                    public void run() {
                        mSwipeToRefresh.setRefreshing(false);
                    }
                });
            }
        });

解决方案

You cannot search for any item whose title contains #Yahoo. See: How to perform sql "LIKE" operation on firebase?

You can however search items whose title begins with #Yahoo:

Firebase firebase = new Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));

Query queryRef = firebase.orderByChild("title").startAt("#" + mHashTag)

To make this work well, you have to add an index to your Firebase rules:

"rules": {
  "userTasks": {
    "$email": {
      ".indexOn": "title" // index tasks in their title property
    }
  }
}

这篇关于如何在Firebase Android中搜索一个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆