如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值

Posted

技术标签:

【中文标题】如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值【英文标题】:How to get value from StartAt specifirc position and EndAt specific position in Firebase Android Query 【发布时间】:2020-04-08 18:04:59 【问题描述】:

我无法从我的数据库中获取数据。

我的数据库:

我的代码:

 Query query = FirebaseDatabase.getInstance().getReference("Quotes").startAt(5).endAt(10);
        query.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for(DataSnapshot data: dataSnapshot.getChildren())
                        String authorName = data.child("Name").getValue().toString();
                        String quoteGiven = data.child("Quote").getValue().toString();
                        name.setText("- " + authorName);
                        quote.setText(quoteGiven);

                
            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) 
                Toast.makeText(MainActivity.this, "Loading Quote failed", Toast.LENGTH_SHORT).show();
            
        );

我想从第 5 个孩子到第 10 个孩子获取我的数据。

我试过了:

Select random entry from Firebase Realtime Database in Java

get random value android firebase java

Firebase queries not working on Android even though the reference retrieves data

但是,它只显示我留下的硬编码文本而不是数据库中的文本?

谁能帮帮我,我不知道我哪里出错了

【问题讨论】:

【参考方案1】:

尝试使用orderByKey()

FirebaseDatabase.getInstance().getReference("Quotes").orderByKey().startAt(String.valueOf(5)).endAt(String.valueOf(10));

这应该会为您提供数据库中从第 5 个键到第 10 个键的所有数据。

来自文档:

orderByKey()

按子键排序结果

https://firebase.google.com/docs/database/android/lists-of-data#sort_data

【讨论】:

我已经添加了,它仍然没有显示任何数据。然后我在 for 循环上添加了一条 toast 消息,但它没有触发,我在事件侦听器中做错了什么,因为它没有进入 for 循环?? 能不能在for循环前加个log,也去掉startat和endAt,测试一下 引起:java.lang.IllegalArgumentException:您必须将 startAt(String value)、endAt(String value) 或 equalTo(String value) 与 orderByKey() 结合使用。不支持其他类型的值或使用带 2 个参数的版本 已修复,FirebaseDatabase.getInstance().getReference("Quotes").orderByKey().startAt(String.valueOf(5)).endAt(String.valueOf(10));【参考方案2】:

要解决这个问题,请更改以下代码行:

Query query = FirebaseDatabase.getInstance().getReference("Quotes").startAt(5).endAt(10);

Query query = FirebaseDatabase.getInstance().getReference("Quotes")
    .orderByKey().startAt("5").endAt("10");

您传递给startAt()endAt() 方法的键应该始终是字符串而不是而不是数字。

【讨论】:

以上是关于如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何从android上的firebase获取用户uid?

如何从android中的firebase获取对象?

如何从android下载firebase数据库作为CSV文件

如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?

如何在 Android 中使用 MVC 模式从 firebase 检索数据? [复制]

如何使用 java/android 从 Firebase ONCE 读取数据?