我有Firebase查询;
Query fixtureQuery = ref.orderByChild("played").startAt(0).endAt(1);
这用于填充Android应用中的ListView。播放的数字范围如下;
我注意到的是,当游戏正在进行时,1,ListView重绘(我希望保持一切实时),但它总是将游戏的值设置为ListView的底部(所以它并没有将其原始位置保留在列表中。)
看来startAt(x)之后的数字总是按顺序排列,与数据库中的位置无关。
有谁知道如何阻止这种情况发生?或者我是否需要按字段排序,以便忽略正在应用的startAt / endAt顺序?
答案 0 :(得分:2)
项目在数据库中没有固定的位置。它们是JSON对象,本质上是无序的。订单仅在您查询项目时或在UI中显示时显示。例如,Firebase数据库控制台按其键的顺序显示项目。
在你的情况下,你要求:
ref.orderByChild("played").startAt(0).endAt(1)
这意味着这些项目按其played
属性的数字顺序排序,其中0
位于1
之前。
如果要按特定的状态顺序获取项目,则应确保用于指示每个状态的数值反映了要检索它们的顺序。如果您有各种排序顺序,则为每个排序顺序添加属性并相应地分配这些值并不罕见。
或者,您只需先加载数据,然后在客户端重新排序。