Android - Firebase 查询 startAt 未按预期工作

标签 android firebase firebase-realtime-database

我正在开发一个使用 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/

相关文章:

Android - 如何使用自定义 SurfaceView 为移动形状制作动画?

java - Android:从特定线程执行方法

java - Android:从 Assets 文件夹中读取并格式化文本

firebase - 需要输入更多数据以便在 Firebase 中进行用户注册

swift - 如何验证 Firebase 上的用户名是否可用?

安卓NDK : Function va_start/va_end could not be resolved

firebase - 如何检查特定文档ID内是否包含特定值?

javascript - Firestore 上的条件 where 查询

android - 如何获取recyclerview Item位置的文档id?

java - Firebase 实时数据库 long 值始终返回 0,即使它不是