![](/img/trans.png)
[英]Android - Firestore returns an empty query using startAfter() and limit()
[英]Querying firestore with orderBy whereEqual and startAfter
我想在我的項目中制作一個帶有分頁的recyclerView
。 但是,我被困在了這個過程中。
我的 Firestore 數據構建如下(某些文檔具有 visibility=false 作為值,因此我不希望它們出現):
現在,我想獲取按dateCreated
排序的前 5 個文檔,然后按我之前收到的最后一個值繼續分頁。
我嘗試使用以下內容:
db
.collection( "Quotes" )
.whereEqualTo( "visibility", true )
.orderBy("dateCreated", Query.Direction.DESCENDING )
.startAfter("dateCreated", dateCreatedOrig
.get(dateCreatedOrig.size()-1))
.limit(5)
.get()
.addOnCompleteListener( task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
...
}
}
dAdapter = new Ddapter(...);
ddapter.notifyDataSetChanged();
rv_Quotes.setAdapter( ddapter );
}
} );
其中dateCreatedOrig
是 List ,其中包含第一個查詢的時間戳,所以我得到最后一個時間戳以從那里繼續分頁。
但是,我收到以下錯誤:
java.lang.IllegalArgumentException:提供給 startAfter() 的 arguments 太多。 arguments 的數量必須小於或等於 orderBy() 子句的數量。
有任何想法嗎?
這里的問題是您將 2 arguments 傳遞給startAfter
。 如果您看到startAfter
的文檔,您將看到它:
創建並返回一個新的查詢,該查詢在提供的字段之后相對於查詢的順序開始。 字段值的順序必須與查詢的 order by 子句的順序相匹配
這意味着您定義將在orderBy
子句中使用的字段名稱,而不是startAfter
,並且兩者應該一起使用。 所以在你的情況下,所有需要做的就是刪除startAt
的第一個參數,它會起作用,所以它看起來像這樣:
db.collection( "Quotes" )
.whereEqualTo( "visibility", true )
.orderBy("dateCreated", Query.Direction.DESCENDING )
.startAfter(dateCreatedOrig.get(dateCreatedOrig.size()-1))
.limit(5)
.get()
.addOnCompleteListener(...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.