如何从 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数据库作为CSV文件
如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?