簡體   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