繁体   English   中英

Android Firebase查询范围(上,中,下)

[英]Android Firebase query with range (Above, Mid, Bottom)

我刚开始在Android中使用Firebase,并编写了这样的查询。

messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
    .child(conversationID).limitToLast(INITIAL_MESSAGE_COUNT)
    .orderByChild("timestamp").startAt(participant.joiningDate).endAt(endAt);

我只能给limitToFirstlimitToLaststartAtendAt (我认为没有中心)

我需要提供时间戳(例如10 am),我想在10 am之前查询10条消息,在10 am之后查询10条消息。 (但我不知道它什么时候开始,什么时候结束)。

编辑

我想做的就是这样。

messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message").
                    child(conversationID).
                    orderByChild("timestamp").equalTo(endAt).limitToFirst(INITIAL_MESSAGE_COUNT).limitToLast(INITIAL_MESSAGE_COUNT);

但是,如果这样做,它会像这样崩溃。

java.lang.IllegalArgumentException:无法在具有先前设置的限制的查询上调用limitToLast!

我该怎么办?

我在firebase中的数据是这样的。

在此处输入图片说明

您可以通过组合startAtendAt来选择一个范围,这两种操作都针对您订购的子级。 例如,如果您希望在某个日期的上午10点至晚上10点之间发送消息,则可以执行以下操作:

long timestampOf10am = ...;
long timestampOf10pm = ...;
messageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").startAt(timestampOf10am).endAt(timestampOf10pm)
  .limitToLast(INITIAL_MESSAGE_COUNT);

更新 :如果您需要在上午10点之前添加10个项目,并在上午10点之后添加10个项目,则需要触发两个查询并在客户端合并结果。

long timestampOf10am = ...;
beforeMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").startAt(timestampOf10am)
  .limitToFirst(INITIAL_MESSAGE_COUNT);
afterMessageSearchQuery = FirebaseDatabase.getInstance().getReference().child("Message")
  .child(conversationID)
  .orderByChild("timestamp").endAt(timestampOf10am)
  .limitToLast(INITIAL_MESSAGE_COUNT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM