基于startAt / endAt

时间:2018-04-06 00:19:12

标签: android firebase firebase-realtime-database

我有Firebase查询;

Query fixtureQuery = ref.orderByChild("played").startAt(0).endAt(1);

这用于填充Android应用中的ListView。播放的数字范围如下;

  • 0 - 未播放
  • 1 - 游戏正在进行中
  • 2 - 游戏结束

我注意到的是,当游戏正在进行时,1,ListView重绘(我希望保持一切实时),但它总是将游戏的值设置为ListView的底部(所以它并没有将其原始位置保留在列表中。)

看来startAt(x)之后的数字总是按顺序排列,与数据库中的位置无关。

有谁知道如何阻止这种情况发生?或者我是否需要按字段排序,以便忽略正在应用的startAt / endAt顺序?

1 个答案:

答案 0 :(得分:2)

项目在数据库中没有固定的位置。它们是JSON对象,本质上是无序的。订单仅在您查询项目时或在UI中显示时显示。例如,Firebase数据库控制台按其键的顺序显示项目。

在你的情况下,你要求:

ref.orderByChild("played").startAt(0).endAt(1)

这意味着这些项目按其played属性的数字顺序排序,其中0位于1之前。

如果要按特定的状态顺序获取项目,则应确保用于指示每个状态的数值反映了要检索它们的顺序。如果您有各种排序顺序,则为每个排序顺序添加属性并相应地分配这些值并不罕见。

或者,您只需先加载数据,然后在客户端重新排序。