我正在使用firebase一段时间,但我遇到了一个问题,我想让孩子拥有最大的价值:
这里的示例是我的json(手动编辑):
{
"Players" : {
"Scores" : {
"-JFUIwudw93dkD" : {
"rank" : 0
},
"-KSFOW833nSfkod" : {
"rank" : 8
},
"-Kk5WfuJ8mlZTPdeUC40" : {
"rank" : 2
},
"-SKKQuyhso83ds" : {
"rank" : 14
}
}
},

我需要获得最高级别的子密钥。 所以我需要" -SKKQuyhso83ds"子。
我使用过这种方法,但它不起作用:
final DatabaseReference mDatabasePlayers = FirebaseDatabase.getInstance().getReference().child("Players");
Query mDatabaseHighestPlayer = mDatabasePlayers.child("Scores").orderByChild("rank").limitToFirst(1);
mDatabaseHighestPlayer.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot){
//This returns null
String Key = dataSnapshot.getKey();
Toast.makeText(main.this,Key,Toast.LENGTH_LONG).show();}
@Override
public void onCancelled(DatabaseError databaseError) {}});
但这不起作用,所以我正在等待一些帮助兄弟。
答案 0 :(得分:0)
更改此行:
emadefghd
与
Query mDatabaseHighestPlayer = mDatabasePlayers.child("Scores").orderByChild("rank").limitToFirst(1);
其中Query mDatabaseHighestPlayer = mDatabasePlayers.child("Scores").child(scoreId).orderByChild("rank").limitToFirst(1);
是scoreId
方法生成的唯一ID。
答案 1 :(得分:0)
Firebase查询按升序排序。由于您按排名和限制排序第一个结果,因此您将获得最低分数。要获得最高分,请使用limitToLast(1)
。
此外,当您对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
所以总的来说:
DatabaseReference mDatabasePlayers = FirebaseDatabase.getInstance().getReference().child("Players");
Query mDatabaseHighestPlayer = mDatabasePlayers.child("Scores").orderByChild("rank").limitToLast(1);
mDatabaseHighestPlayer.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String Key = childSnapshot.getKey();
Toast.makeText(main.this,Key,Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't swallow errors
}
});