我正在开发一个使用 Firebase 作为后端的 Android 应用程序。
我是 Firebase 的新手,遇到了一个问题,问题是当我尝试使用 startAt
查询搜索记录时,它返回的结果不是以我输入的关键字开头。
这是数据集
itemname
-KK8vI8A5BZZp3Xo3FpA
name: "abc"
-KK8w3uoJdJ0hBSrq0CS
name: "test"
-KKAC1o9Vazyg9JLtDoQ
name: "dude"
这是代码 fragment
Query query = firebase.child(Constants.KEY_ITEM_NAME).orderByChild("name").startAt("abc");
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Iterator<DataSnapshot> i = dataSnapshot.getChildren().iterator();
while (i.hasNext()) {
DataSnapshot d = i.next();
LOG(d.getKey(), d.getValue().toString());
}
}
因此,当我搜索 abc
时,响应还包括 test
。
也许我做错了什么或者我走错了路。
谁能给我指出正确的方向。
P.S 我正在尝试使用 AutocompleteTextView
来搜索项目。
谢谢
最佳答案
当您调用 orderByChild("name").startAt("abc")
时,数据库按名称属性对所有项目进行排序,跳过 abc
之前的项目,然后全部归还。
如果您只想返回匹配 abc
的 child ,您可以使用 equalTo()
:
query = firebase.child(Constants.KEY_ITEM_NAME).orderByChild("name").equalTo("abc");
关于Android - Firebase 查询 startAt 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798366/