过滤快照结果到firebase

问题描述 投票:0回答:1

这是我的数据库:

Firebase database

对于每个类别,应该返回“总投票数”最高的候选人。

这是我的代码:

Query presidentquery = reference.child("candidates").orderByChild("category").equalTo("President");
        presidentquery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                        String firstname = dataSnapshot1.child("firstname").getValue(String.class);
                        String lastname = dataSnapshot1.child("lastname").getValue(String.class);
                        Long tvotes = dataSnapshot1.child("totalVotes").getValue(Long.class);
                        pres.setText(firstname + " " + lastname+" - "+tvotes+" Votes");
                    }
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

而不是返回投票率最高的候选人,而是返回最近的候选人。如何在数据快照中过滤结果以显示具有最高“ totalVotes”的候选人。

谢谢

java android firebase firebase-realtime-database
1个回答
0
投票

我复制了您的问题,并找到了一种获得最高票数的候选人的方法。

在模型类中添加以下方法。

@Override
    public int compareTo(Candidate o) {
        return (this.getTotalVotes() > o.getTotalVotes() ? -1 :
                (this.getTotalVotes() == o.getTotalVotes() ? 0 : 1));
    }

要覆盖compareTo方法,您需要通过implements Comparable<Candidate>实现Comparable类>

创建一个用于对值进行排序的类

public class Sorter {

    ArrayList<Candidate> candidateList = new ArrayList<>();
    public Sorter(ArrayList<Candidate> candidateList) {
        this.candidateList = candidateList;
    }
    public ArrayList<Candidate> sortByTotalVotes() {
        Collections.sort(candidateList);
        return candidateList;
    }

}

在您的Activity类中,添加

这里,您需要将从数据库中获取的所有数据添加到数组列表中。添加完所有数据后,您需要对数据进行排序并显示结果。

Query query = databaseReference.child("candidates").orderByChild("category").equalTo("President");
query.addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            ArrayList<Candidate> candidates = new ArrayList<>();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                 int id = dataSnapshot1.child("totalVotes").getValue(Integer.class);
                 String firstName = dataSnapshot1.child("firstName").getValue(String.class);
                 String lastName = dataSnapshot1.child("lastName").getValue(String.class);
                 candidate = new Candidate(firstName, lastName, id);
                 candidates.add(candidate);
             }
             Sorter sorter = new Sorter(candidates);
             ArrayList<Candidate> candidateArrayList = sorter.sortByTotalVotes();
             System.out.println("Max value: " + candidateArrayList.get(0));                            
             System.out.println("Printing the sorted values----------------");
             for (Candidate candidate : candidateArrayList) {    
                  System.out.println(candidate);
             }   
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});
© www.soinside.com 2019 - 2024. All rights reserved.