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.

要获取上一页,您将使用:

https://Whosebug.firebaseio.com/70102492/Main/News/Categories/Education.json?print=pretty&orderBy=%22Views%22&limitToLast=10&endAt=33,%22-Mn7-ZxkUPO01iddfh2tpEn%22

所以:

  • 我们endAt=33,"-Mn7-ZxkUPO01iddfh2tpEn",这意味着我们在下一页的第一项结束。我们在这个参数中同时包含 Views 的值和键,因为可能有多个节点 Views 等于 33 并且在这种情况下数据库将使用键 select 结束的正确节点。
  • 考虑到您已经显示 -Mn7-ZxkUPO01iddfh2tpEn.
  • ,您可能想要请求 11 件而不是 10 件