我在FirebaseRealTimeDatabase中存储了一堆嵌套数据,如下所示:
我能够检索数据集,即配置文件及其各自的分数。
ArrayList<String> profileNameList = new ArrayList();
ArrayList<String> profileStatusList = new ArrayList();
ArrayList<int> scoreList = new ArrayList();
databaseReference.child("players")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child : children) {
Profile profile = child.child("profile").getValue(Profile.class);
Scores scores= child.child("scores").getValue(Scores.class);
profileNameList.add(profile.getName());
profileStatusList.add(profile.getStatus());
scoreList.add(scores.getScore());
}
}
然后,我使用Collections.sort(scoreList)
对分数从最低到最高进行排序。但是,我面临的挑战是,如何将排序后的分数(从最低到最高)再次与玩家资料相关联,例如
Gavin - 15
Rico - 40
感谢您的帮助。
答案 0 :(得分:0)
要解决此问题,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("players");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("profile").child("name").getValue(String.class);
long score = ds.child("score").child("baseball").getValue(Long.class);
Log.d(TAG, name + " - " + score);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
playersRef.addListenerForSingleValueEvent(valueEventListener);
您的logcat中的结果将是:
Rico Hernandes - 40
Gavin Muro - 15