我正在使用c# 在我的 android 應用程式中使用firebase 資料庫 rest API并且我的應用程式在頁面打開時從 firebase 資料庫中獲取 10 個資料,并且這些資料按(視圖計數)排序,使用.OrderBy("Views").LimitToLast(10)到目前為止我正確地獲取資料并且它作業正常,并且我將最后一個 id 存盤在公共字串中,因為當用戶向下滾動串列視圖時我從 firebase 資料庫中獲取另外 10 個元素,但是當我獲取其他 10 個資料并使用.StartAt(LastId).LimitToLast(10)firebase 時將回傳 null (0) 資料,因為我使用時回傳的鍵沒有正確排序.OrderBy("Views")所以我無法得到正確的最后一個 id 來獲取從最后一個 id 開始的資料,我找到了一種使用排序鍵的方法OrderByKey() 并獲取正確的最后一個 id 并從最后一個 id 開始獲取其他 10 個資料,**但我想獲取按(視圖)** 排序的資料,
摘要:如何從(“視圖”)排序的 firebase 資料庫中獲取 10 個元素,同時我可以從前 10 個的最后一個 id 開始獲取其他 10 個元素
我的 JSON 結構:
{
"Main" : {
"News" : {
"Categories" : {
"Education" : {
"-Mn7-ZxkUPO01ifhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 5
},
"-Mn7-ZxkUPO01ifhtp11En" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 5
},
"-Mn7-ZxkUPO0112ifhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 12
},
"-Mn7-ZxkUPO01dxifhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 545
},
"-Mn7-ZxkUPO01sdifhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 5
},
"-Mn7-ZxkUPO01ifddhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 200
},
"-Mn7-ZxkUPO01ifdshtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 1
},
"-Mn7-ZxkUPO01ifhtdxpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 223
},
"-Mn7-ZxkUPO01ifhewtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 451
},
"-Mn7-ZxkUPO01idsdfhtpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 532
},
"-Mn7-ZxkUPO01ifh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 1500
},
"-Mn7-ZxkUPOd01ifh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 45
},
"-Mn7-ZxkUPO01ifh21tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 2
},
"-Mn7-ZxkUPO01ifh2dstpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 4
},
"-Mn7-ZxkUPO01ifh2txpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 4
},
"-Mn7-ZxkUPO01ifhds2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 2
},
"-Mn7-ZxkUPO01iddfh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 33
},
"-Mn7-ZxkUPO01idxfh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 52
},
"-Mn7-ZxkUPO01idsdfh2tpEn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 1
},
"-Mn7-ZxkUPO01ifh2tpEdsn" : {
"Text" : "some text",
"Title" : "some title",
"Views" : 1000000
}
}
}
}
}
C# 代碼:
string LastId;
public class NewsData
{
public string Title { set; get; }
public string Text { set; get; }
public int Views { set; get; }
}
public Page1()
{
InitializeComponent();
//work good and get the top 10 views
var Data = await firebaseclient
.Child("Main/News/Categories/Education")
.OrderBy("Views")
.LimitToLast(10)
.OnceAsync<NewsData>();
//Get Last id
LastId = Data.Last().Key;
}
public voud GetMore()
{
//this will return null data
var Data = await firebaseclient
.Child("Main/News/Categories/Education")
.OrderBy("Views")
.StartAt(LastId)
.LimitToLast(10)
.OnceAsync<NewsData>();
//Update Last id
LastId = Data.Last().Key;
}
在此先感謝我感謝 Frank van Puffelen,因為他幫了我很多 :) 除此之外,他在這里發布了用于測驗的 JSON 回應:Json Response
uj5u.com熱心網友回復:
正如我在對您上一個問題的評論中所說的那樣:Firebase 實時資料庫 REST API 將回傳正確的、經過過濾的節點,但它們不會按任何定義的順序排列 - 因為 JSON 物件中的鍵的順序是未定義的。你無法改變這一點。
您需要做的是對應用程式代碼中的結果重新排序,然后確定第一個/最后一個。如果您對共享的第一個/最后一個節點執行此操作,您將看到第一個節點具有Views 33和 key -Mn7-ZxkUPO01iddfh2tpEn。
要獲取上一頁,您可以使用:
https://stackoverflow.firebaseio.com/70102492/Main/News/Categories/Education.json?print=pretty&orderBy="Views"&limitToLast=10&endAt=33,"-Mn7-ZxkUPO01iddfh2tpEn"
所以:
- We
endAt=33,"-Mn7-ZxkUPO01iddfh2tpEn",這意味著我們在下一頁的第一項結束。我們Views在這個引數中包含了 的值和鍵,因為可能有多個節點Views等于33,在這種情況下,資料庫將使用鍵來選擇正確的節點作為結束。 - 考慮到您已經顯示了
-Mn7-ZxkUPO01iddfh2tpEn.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367128.html
