我想从 Firebase 实时数据库中获取搜索结果与子值匹配的所有节点。例如,考虑我的以下 Firebase 结构:
-Users
-uid
-uname:abc
-usurname:xyz
-uid
-uname:abc
-usurname:pqr
-uid
-uname:hij
-usurname:xyz
我的搜索键是abc xyz
。我想从 -uname 和 -usurname 获取结果,以向用户显示 Firebase 的匹配结果。
我的代码:
Query query = FirebaseDatabase.getInstance().getReference("Users").orderByChild("uname").startAt(getInput).orderByChild("usurname").startAt(getInput);
query.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(@NonNull DataSnapshot snapshot) {
Log.e("app","found: "+snapshot.getValue());
}
public void onCancelled(@NonNull DatabaseError error) {
}
});
错误:
java.lang.IllegalArgumentException: You can't combine multiple orderBy calls!
at com.google.firebase.database.Query.validateNoOrderByCall(Query.java:134)
at com.google.firebase.database.Query.orderByChild(Query.java:609)
如何在 Java 代码中编写查询?
最佳答案
你可以这样做。我假设您已将搜索键拆分为两个字符串,即 searchKey1 和 searchKey2,如下所示。
String searchKey="abc xyz";
String[] str=searchKey.split(" ");
String searchKey1=str[0];
String searchKey2=str[1];
// OR YOU CAN SPLIT HOWEVER YOU WANT //
databaseReference.child("users").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
if(dataSnapshot1.child("uname").exists()&&dataSnapshot1.child("usurname").exists()) {
if(dataSnapshot1.child("uname").getValue().toString().equals(searchKey1)&&dataSnapshot1.child("usurname").getValue().toString().equals(searchKey2)) {
//Do What You Want To Do.
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
关于android - 如何使用两个子值在 Firebase 中进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62726987/