Android - Firebase查询startAt无法按预期工作

Max*_*Max 7 android firebase firebase-realtime-database

我正在开发一个使用Firebase作为后端的Android应用.我是Firebase的新手并遇到了问题,问题是当我尝试使用startAt查询搜索记录时,它会返回不以我输入的关键字开头的结果.

这是数据集

itemname
    -KK8vI8A5BZZp3Xo3FpA
       name: "abc"
    -KK8w3uoJdJ0hBSrq0CS
       name: "test"
    -KKAC1o9Vazyg9JLtDoQ
       name: "dude"
Run Code Online (Sandbox Code Playgroud)

这是代码snippit

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());
                }
            }
Run Code Online (Sandbox Code Playgroud)

所以当我搜索abc响应时也包括test.也许我做错了什么或者我做错了路.有谁能指出我正确的方向.

PS我正在尝试使用AutocompleteTextView搜索项目.

谢谢

Fra*_*len 5

当您调用orderByChild("name").startAt("abc")数据库按名称属性对所有项目进行排序时,先跳过这些项目abc,然后将它们全部返回.

如果您只想找回匹配的孩子abc,您可以使用equalTo():

query = firebase.child(Constants.KEY_ITEM_NAME).orderByChild("name").equalTo("abc");
Run Code Online (Sandbox Code Playgroud)

  • 使用`.orderByChild("name")时的工作.startAt("ab").endAt("ab\uf8ff");` (10认同)
  • 是的这是有效的,但它本身并没有找到"ab".那么如何才能得到以"ab"开头并且匹配/等于"ab"的每个值? (3认同)