在Android中从Firebase实时数据库检索数据

埃里克·梅迪纳

我是Firebase和NoSQL的新手。我有一个Android演示,带有“城市自动完成”文本字段,我想在键入时在其中填充Firebase数据库中的城市。

{   "cities":{
        "Guayaquil":true,
        "Gualaceo":true,
        "Quito":true,
        "Quevedo":true,
        "Cuenca":true,
        "Loja":true,
        "Ibarra":true,
        "Manta":true
    }
}

到目前为止,这就是我所拥有的。

如何从以字母开头(从键盘输入)开始的DB城市中检索?如果我开始输入“ G”,我希望收到“瓜亚基尔”和“瓜拉索”。

如果我使用orderByValue总是返回一个空快照。

如果使用orderByKey返回整个列表。

    Query citiesQuery = databaseRef.child("cities").startAt(input).orderByValue();
    citiesQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> cities = new ArrayList<String>();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                cities.add(postSnapshot.getValue().toString());
            }

注意:如果您可以推荐更好的数据结构,欢迎您。

弗兰克·范普菲伦

@NicholasChen已发现问题。但是,这是使用3.x SDK实施的方式:

DatabaseReference cities = databaseRef.child("cities")
Query citiesQuery = cities.orderByKey().startAt(input).endAt(input+"\uf8ff");
citiesQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> cities = new ArrayList<String>();
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            cities.add(postSnapshot.getValue().toString());
        }

通过从用户输入开始并以用户输入开头的最后一个字符串结束,您将获得所有匹配项

对于相对较短的项目列表,Ryan的方法也可以正常工作。但是上面的Firebase查询将过滤服务器端。

更新资料

我只是运行了这段代码:

    DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference("39714936");

    String input = "G";

    DatabaseReference cities = databaseRef.child("cities");
    Query citiesQuery = cities.orderByKey().startAt(input).endAt(input + "\uf8ff");
    citiesQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> cities = new ArrayList<String>();

            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                cities.add(postSnapshot.getValue().toString());
            }
            System.out.println(cities);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

它打印:

真正

真正

显然可以匹配两个城市。

随时针对我的数据库进行测试:https : //stackoverflow.firebaseio.com/39714936

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 Firebase 实时数据库中检索子数据

如何从Firebase中的实时数据库检索数据?

无法从 Firebase 实时数据库中检索数据

从 Firebase 实时数据库中检索数据

Firebase:从实时数据库中检索childByAutoID

从 Firebase 实时数据库中检索好友

Firebase实时数据库未检索版本apk中的数据[Android]

Android Firebase - 从 Firebase 实时数据库中检索特定值

列表视图从android中firebase的实时数据库中检索一项

从Android中的Firebase实时数据库检索大于特定值的值

Android:Firebase实时数据库

从Firebase实时数据库检索单个数据

从Firebase实时数据库检索数据到ListView

如何从Firebase实时数据库检索数据?

无法在Android中更新Firebase实时数据库

数据更改后如何从Firebase实时数据库中检索特定数据

如何使用Android Studio从Firebase实时数据库中的节点检索特定数据?

Firebase实时数据库值检索

如何从 Firebase 实时数据库正确检索值?

Firebase 实时数据库检索空值

从Firebase实时数据库中检索数据并自动填充到文本框中

Firebase实时数据库通过uid检索数据并将其放入Varable Kotlin android

如何从我的 firebase 实时数据库中检索孩子数据的孩子的孩子?

无法将数据从 Firebase 实时数据库检索到 Web 应用程序中

如何在Swift 5上从Firebase实时数据库中检索子数据

从Firebase实时数据库中检索历史记录数据

使用选项从Firebase实时数据库中检索MCQ数据

Firebase:以Int形式从实时数据库中检索数据

从 Firebase(实时数据库)检索数据到列表中(Kotlin)