我的Firebase数据库就像这样
当下面的代码运行时:
String loc=(snapshot.child("loc").getvalue()).tostring();
我得到的输出与数据库的顺序不同:
为什么会这样?
答案 0 :(得分:3)
Firebase数据存储为JSON,并且本质上是无序的。
如果要按特定顺序访问数据,则应为查询指定orderBy
子句,并使用快照的getChildren()
方法访问数据。
假设您要按升序键记录项目:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getRef();
Query locations = rootRef.orderByKey();
locations.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot locSnapshot: snapshot.getChildren()) {
System.out.println(locSnapshot.getKey() + ": " + locSnapshot.getValue(String.class));
}
}
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});
此示例来自({3}}。
来自(修改)答案 1 :(得分:1)
弗兰克打败了我的编辑,请使用orderBy....
您需要使用forEach
而不是child
方法(或child.foreach
)
以下是doc:
的摘录由于JavaScript对象的工作方式,数据的排序 val()返回的JavaScript对象不保证与 服务器上的排序以及child_added事件的排序。那是 其中forEach()派上用场。它保证了孩子们 DataSnapshot将按其查询顺序进行迭代。
来源:https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#forEach