2016-07-19 61 views
7

嘿,我正在開發一個應用程序,它會顯示我每天添加到firebase數據庫的最新數據。最近的數據應該顯示在回收站視圖的頂部。這裏是節點如何看起來像火力firebase android分頁與recyclerview

enter image description here

讓我們假設,目前有在數據庫中100個節點。當應用程序打開時,它獲取節點100到80中的數據存儲。當用戶向下滾動時,它獲取存儲在節點79到59中的更多最新數據,依此類推。

現在我能獲得最後的20個節點與此查詢

Query jokesQuery = FirebaseDatabase.getInstance().getReference().child("hindi-jokes").orderByKey().limitToLast(20); 

我可以在79位獲得該節點的關鍵,如果我修改查詢限制到最後21項,但如何然後使用第79個節點密鑰獲取下一組節點數據,即從第79個到第59個?

+0

如何保持上次獲取的密鑰在內存中並使用'startAt(savedKey)'?你可能可以將它與'limitToLast(20)'結合起來。只要確保你沒有顯示保存的密鑰兩次 – Sunshinator

回答

11

您會使用endAt(),因爲您希望將最後一個項目返回爲您以前獲得的「最老的」項目。

DatabaseReference jokesRef = FirebaseDatabase.getInstance().getReference().child("hindi-jokes"); 
Query jokesQuery = jokesRef.orderByKey().endAt(oldestKeyYouveSeen).limitToLast(20); 

oldestKeyYouveSeen被稱爲錨。您需要在代碼中自行跟蹤:將其設置爲您所見過的最古老項目的關鍵。

請注意,它將在第一個查詢中和第二個查詢中,因此您必須在代碼中明確排除一次。

+0

感謝您的答案弗蘭克,正是我所期待的。不過我注意到,在firebase db上粘貼內容會從文本中刪除新行,並將所有文本放在一行中。無論如何,使它不這樣做? –

+0

這聽起來像是一個完全不同的問題。但我會嘗試使用「\ n」作爲換行符的換碼。 –

+1

嘿@FrankvanPuffelen我想知道如何獲得'oldestKeyYouveSeen'? –