Firebase返回的数据与我想要的查询不匹配。
我的域类类似于
Event {
long eventDate
//many other irrelevant stuff
}
我希望检索10个下一个事件(今天之后)(SQL类似于:
Select * from event e where e.eventDate > now() order by e.eventDate ASC limit 10
然后我正在执行以下请求:
fire.child("event").orderByChild("eventDate").startAt(System.currentTimeMillis() + 1, "eventDate").limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<Giveaway> page = new ArrayList<>(PAGE_SIZE);
for (DataSnapshot evs : dataSnapshot.getChildren()) {
Event da = evs.getValue(Event.class);
long s = System.currentTimeMillis();
long w = da.eventDate;
System.out.println(s < w); //IN APP CHECK
]
}}
但此查询返回的所有结果均显示打印false
答案 0 :(得分:0)
我之所以回答这个问题,是因为将来有人遇到同样的问题,因为Google的api会反其道而行之地
根据firebase: https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query
startAt(布尔值,字符串键)创建一个仅限于 返回值大于或等于给定子节点 值,使用给定的orderBy指令或优先级作为默认值,以及 另外,只有子节点的键大于或等于 给定密钥。
所以我坚决.startAt(System.currentTimeMillis() + 1, "eventDate")
将返回子节点eventDate
大于System.currentTimeMillis() + 1
的节点,但实际上startAt
上的第二个参数用于比较每个节点的密钥< / p>
所以这使我的查询逻辑被彻底破坏了
删除startAt
的第二个参数使返回值符合预期