Android - 带过滤功能的 Firebase 搜索
Android - Firebase searching with filtering
我正在开发一款应用程序,可以帮助用户搜索和下载其他用户以 post.
形式上传的书籍
为了首先下载书籍,用户应该根据标题等属性搜索它们。
满足用户要求的post应该显示在firebase-UIrecyclerview
这是我的 Firebase 数据结构:
我想要创建 Query 的示例代码,其中 returns 方便的帖子 ID,例如 ImgBRr2YFYfAu1WwENS1Ucj6jz13_1514813350760.
请帮我解决问题,欢迎提出任何建议和想法
这是您可以做的,
按语言搜索,然后按标题和作者过滤
public void search(String languangeSearchString, String title, String author){
FirebaseDatabase.getInstance().getReference().child("Posts").equalTo("language").startAt(languangeSearchString).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String id = dataSnapshot.getKey();
if(dataSnapshot.child("title").exists() && dataSnapshot.child("author").exists()){
if(dataSnapshot.child("title").getValue(String.class).equals(title) && dataSnapshot.child("author").getValue(String.class).equals(author)){
//Here are the results
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
要在 firebase-database
上执行搜索,我们通常使用 orderBy()
。喜欢
firebaseDatabase.getReference("Posts").child("postId")
.orderBy("authorId")
但是不能使用多个 orderBy()
比如,
firebaseDatabase.getReference("Posts").child("postId")
.orderBy("authorId")
.orderBy("title") // this will throw an error
.orderBy("language")
所以你只需要在一个 child-node
上执行搜索。
有关更多信息,请查看此 Query based on multiple where clauses in Firebase
我正在开发一款应用程序,可以帮助用户搜索和下载其他用户以 post.
形式上传的书籍为了首先下载书籍,用户应该根据标题等属性搜索它们。
满足用户要求的post应该显示在firebase-UIrecyclerview
这是我的 Firebase 数据结构:
我想要创建 Query 的示例代码,其中 returns 方便的帖子 ID,例如 ImgBRr2YFYfAu1WwENS1Ucj6jz13_1514813350760.
请帮我解决问题,欢迎提出任何建议和想法
这是您可以做的,
按语言搜索,然后按标题和作者过滤
public void search(String languangeSearchString, String title, String author){
FirebaseDatabase.getInstance().getReference().child("Posts").equalTo("language").startAt(languangeSearchString).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String id = dataSnapshot.getKey();
if(dataSnapshot.child("title").exists() && dataSnapshot.child("author").exists()){
if(dataSnapshot.child("title").getValue(String.class).equals(title) && dataSnapshot.child("author").getValue(String.class).equals(author)){
//Here are the results
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
要在 firebase-database
上执行搜索,我们通常使用 orderBy()
。喜欢
firebaseDatabase.getReference("Posts").child("postId")
.orderBy("authorId")
但是不能使用多个 orderBy()
比如,
firebaseDatabase.getReference("Posts").child("postId")
.orderBy("authorId")
.orderBy("title") // this will throw an error
.orderBy("language")
所以你只需要在一个 child-node
上执行搜索。
有关更多信息,请查看此 Query based on multiple where clauses in Firebase