我正在嘗試使用 orderByChild() 對來自 Firebase 的資料進行排序和顯示并使用:
ref.child("dinosaurs").orderByChild("height").get().addOnCompleteListener(...);
我一直想知道為什么它沒有排序,直到我意識到childEventListener檔案中使用了它。本來應該是:
ref.child("dinosaurs").orderByChild("height").addChildEventListener(...);
兩者在addValueEventListener使用orderByChild或任何排序方法方面有什么區別?難道get()不跟隨orderByChild()?
uj5u.com熱心網友回復:
您描述的所有方法都按照您的查詢請求的順序回傳子節點。
很可能你正在呼叫你得到getValue()的完整DataSnapshot內容。這樣做會將結果轉換為 aMap并且(根據定義)映射中鍵的順序是未定義的。
當您使用 時addChildEventListener,您onChildAdded已按順序為每個單獨的子快照呼叫,因此您無法犯此錯誤。
要處理的順序產生的子節點你要求他們在onDataChange使用的時候get(),你需要回圈getChildren()的DataSnapshot你回來,如圖所示,檔案中的監聽價值活動的孩子的名單。
所以像:
ref.child("dinosaurs").orderByChild("height").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (!task.isSuccessful()) {
Log.e("firebase", "Error getting data", task.getException());
}
else {
DataSnapshot snapshot = task.getResult();
for (DataSnapshot childSnapshot: snapshot.getChildren()) {
Log.i("FIREBASE", childSnapshot.getKey());
}
}
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362890.html
下一篇:如何通過在js中迭代物件來過濾它
