Android Firebase检查添加的子值是否在数据库的具体范围内

时间:2017-02-25 21:40:23

标签: android firebase-realtime-database

我是使用firebase的新手,尝试为我的案例找到最佳解决方案。

我想实现一些高分系统,该系统将检查用户的分数是否在最高分中,例如在实际数据库中排名前10位。

我的数据库结构如下:

Score
  -KdqwHzp2mFEPEEbTylu
      nickname: "jackson"
      result: 20
  -KdqwYBJUGi-dsDak56n
      nickname: "jackson"
      result: 13
  -Kdr--la-ZCcKkurE1Bl
      nickname:"jackson"
      result: 15

我的分数对象:

public class Score {
    private String nickname;
    private Integer result;

    public Score(String nickname, Integer result) {
        this.nickname = nickname;
        this.result = result;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public Integer getResult() {
        return result;
    }

    public void setResult(Integer result) {
        this.result = result;
    }
}

任何人都可以给我一个如何实现这个并提供代码示例的建议吗?

1 个答案:

答案 0 :(得分:0)

您使用查询:

DatabaseReference ref = FirebaseDatabase.getInstance().ref("Score");
Query query = ref.orderByChild("result").limitToLast(10);
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot scoreSnapshot: dataSnapshot.getChildren()) {
            Score score = scoreSnapshot.getValue(Score.class);
            ...
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // ...
    }
});

请注意,分数将按递增顺序排列。 Firebase数据库没有运算符来返回降序列表。因此,如果您想展示排行榜,您必须在客户端上撤消它们。