Firebase Rest Api:How 使用最后一个键 ID 使用 OrderBy() 和 StartAt()
Firebase Rest Api:How To Use OrderBy() and StartAt() using The Last Key id
我在我的 android 应用程序中使用 firebase 数据库 rest API 使用 c# 我的应用程序在页面时从 firebase 数据库获取 10 个数据已打开并且这些数据使用 .OrderBy("Views").LimitToLast(10)
按(浏览次数)排序到目前为止,我正在正确获取数据并且它正常工作,并且我将最后一个 ID 存储在 public 字符串中,因为我得到当用户向下滚动列表视图时,firebase 数据库中的另外 10 个元素,但是当我获得其他 10 个数据并使用 .StartAt(LastId).LimitToLast(10)
时,firebase 将 return null (0) 数据, 因为 当我使用 .OrderBy("Views")
时 return 的键没有正确排序所以我无法获得正确的最后一个 ID 来获取从最后一个 ID 开始的数据,我找到了一种方法来订购使用 OrderByKey()
键并获取正确的最后一个 ID 并从最后一个 ID 开始获取其他 10 个数据,**但我想获取按 (Views) 排序的数据 **,
总结:如何从 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
}
}
}
}
}
提前致谢
我还要感谢 Frank van Puffelen,因为他帮了我很多 :)
正如我在对您上一个问题的评论中所说:Firebase 实时数据库 REST API 将 return 正确的过滤节点,但它们不会按任何定义的顺序 - 作为JSON 对象中键的顺序未定义。您无能为力。
您需要做的是在您的应用程序代码中重新排序结果,然后确定 first/last 一个。如果您为共享的 first/last of nodes 执行此操作,您将看到第一个节点具有 Views
33
和密钥 -Mn7-ZxkUPO01iddfh2tpEn
.
要获取上一页,您将使用:
所以:
- 我们
endAt=33,"-Mn7-ZxkUPO01iddfh2tpEn"
,这意味着我们在下一页的第一项结束。我们在这个参数中同时包含 Views
的值和键,因为可能有多个节点 Views
等于 33
并且在这种情况下数据库将使用键 select 结束的正确节点。
- 考虑到您已经显示
-Mn7-ZxkUPO01iddfh2tpEn
. ,您可能想要请求 11 件而不是 10 件
我在我的 android 应用程序中使用 firebase 数据库 rest API 使用 c# 我的应用程序在页面时从 firebase 数据库获取 10 个数据已打开并且这些数据使用 .OrderBy("Views").LimitToLast(10)
按(浏览次数)排序到目前为止,我正在正确获取数据并且它正常工作,并且我将最后一个 ID 存储在 public 字符串中,因为我得到当用户向下滚动列表视图时,firebase 数据库中的另外 10 个元素,但是当我获得其他 10 个数据并使用 .StartAt(LastId).LimitToLast(10)
时,firebase 将 return null (0) 数据, 因为 当我使用 .OrderBy("Views")
时 return 的键没有正确排序所以我无法获得正确的最后一个 ID 来获取从最后一个 ID 开始的数据,我找到了一种方法来订购使用 OrderByKey()
键并获取正确的最后一个 ID 并从最后一个 ID 开始获取其他 10 个数据,**但我想获取按 (Views) 排序的数据 **,
总结:如何从 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
}
}
}
}
}
提前致谢 我还要感谢 Frank van Puffelen,因为他帮了我很多 :)
正如我在对您上一个问题的评论中所说:Firebase 实时数据库 REST API 将 return 正确的过滤节点,但它们不会按任何定义的顺序 - 作为JSON 对象中键的顺序未定义。您无能为力。
您需要做的是在您的应用程序代码中重新排序结果,然后确定 first/last 一个。如果您为共享的 first/last of nodes 执行此操作,您将看到第一个节点具有 Views
33
和密钥 -Mn7-ZxkUPO01iddfh2tpEn
.
要获取上一页,您将使用:
所以:
- 我们
endAt=33,"-Mn7-ZxkUPO01iddfh2tpEn"
,这意味着我们在下一页的第一项结束。我们在这个参数中同时包含Views
的值和键,因为可能有多个节点Views
等于33
并且在这种情况下数据库将使用键 select 结束的正确节点。 - 考虑到您已经显示
-Mn7-ZxkUPO01iddfh2tpEn
. ,您可能想要请求 11 件而不是 10 件