Я пытаюсь кодировать табло для моего приложения.Я сделал большую часть табло, но у меня есть одна проблема, которую я не могу исправить.Когда я изменяю баллы в моей базе данных Firebase, в рейтинге отображаются избыточные имена и баллы
Структура моей базы данных:
Табло до изменения:
Табло после изменения:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ranking);
String username = getIntent().getStringExtra("UserName");
currentuser = username;
un1 = (TextView)findViewById(R.id.textusernameplatz1);
un2 = (TextView)findViewById(R.id.textusernameplatz2);
un3 = (TextView)findViewById(R.id.textusernameplatz3);
s1 = (TextView)findViewById(R.id.textscoreplatz1);
s2 = (TextView)findViewById(R.id.textscoreplatz2);
s3 = (TextView)findViewById(R.id.textscoreplatz3);
databaseReference = FirebaseDatabase.getInstance().getReference("Users");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// username & score von Datenbank lesen
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
String userkey = dsp.getKey();
String scores = dsp.child("scorehigh").getValue().toString();
String userName = dsp.child("username").getValue().toString();
Integer scoresint = Integer.parseInt(scores);
RankingData rd = new RankingData(scoresint, userName);
rankingData.add(rd);
Collections.sort(rankingData);
}
// probleme bei refresh: Lösung evtl: exist() methode coden, damit
// ein Username nicht doppel auftreten kann
un1.setText(rankingData.get(0).getUsername());
un2.setText(rankingData.get(1).getUsername());
un3.setText(rankingData.get(2).getUsername());
s1.setText(rankingData.get(0).getScore().toString());
s2.setText(rankingData.get(1).getScore().toString());
s3.setText(rankingData.get(2).getScore().toString());
}
@Override
public void onCancelled(DatabaseError error) {
}
});
Мой другой класс:
public RankingData(Integer score, String username) {
this.score = score;
this.username = username;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public int compareTo(RankingData b){
if(this.getScore() < b.getScore()){
return 1;
}
if(this.getScore() > b.getScore()){
return -1;
}
return 0;
}