如何在Firebase Android中搜索一个值 [英] How to search for a value in 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 $开头的项目Firebase Firebase(Constants.FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail)); Firebase(新的Firebase(常量).FIREBASE_URL_USER_TASKS).child(Utils.encodeEmail(unProcessedEmail));
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屋!