【问题标题】:Firebase Sorting Score from Highest to Lowest ~ AndroidFirebase 排序分数从高到低 ~ Android
【发布时间】:2016-11-13 06:45:52
【问题描述】:

MainActivity里面,我有这个功能:

 public void sortingData() {

    mRootRef = new Firebase("https://fyp-1-43a27.firebaseio.com/User");
    dbSortAllData = FirebaseDatabase.getInstance().getReference();

    ListView mLvScore = (ListView) findViewById(R.id.lvScore);

    final List<UserInformation> listScore = new LinkedList<>();
    final ArrayAdapter<UserInformation> adapter
            = new ArrayAdapter<UserInformation>
            (this, R.layout.scoreboard_row, listScore) {

        @NonNull
        @Override
        public View getView(int position, View view, ViewGroup parent) {
            if (view == null) {
                view = getLayoutInflater().inflate(R.layout.scoreboard_row, parent, false);
            }

            UserInformation item = listScore.get(position);
            ((TextView) view.findViewById(R.id.tvScoreName)).setText(item.getName());
            ((TextView) view.findViewById(R.id.tvScorePoint)).setText(item.getScore());
            return view;
        }
    };
    mLvScore.setAdapter(adapter);

    com.firebase.client.Query queryRef = mRootRef.orderByChild("score").startAt("score").endAt("score").limitToFirst(50);
    queryRef.addChildEventListener(new com.firebase.client.ChildEventListener() {
        @Override
        public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) {
            UserInformation sI = dataSnapshot.getValue(UserInformation.class);
            listScore.add(sI);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(com.firebase.client.DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(com.firebase.client.DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(com.firebase.client.DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}

我的模型课:

public class UserInformation implements Comparable<UserInformation> {

    public String name;
    public String age;
    public String score;

    public UserInformation() {}

    public UserInformation(String name, String age, String score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    // ... Getters and Setters here. 
}

这些代码有效,从最低到最高排序。

我的问题是如何从最高到最低排序?非常感谢您的建议和建议。

【问题讨论】:

  • Firebase 按字典顺序排序,AFAIK。您可以反转 ArrayAdapter 的数据
  • 你为什么使用 firebase.com 而不是 firebase.google.com ? firebase.com 已弃用。
  • Collections.sort(scores, new Comparator() { public int compare(Score o1, Score o2) { return o2.getScores().get(0).compareTo(o1.getScores ().get(0)); } });上面的代码是我在互联网上找到的,但我真的不知道如何适应它。任何指导表示赞赏

标签: android sorting firebase firebase-realtime-database


【解决方案1】:

您可以在客户端重新排序数据 - 只需反转列表即可。

编辑: 当你想反转列表时,你可以使用:

Collections.reverse(listScore);
adapter.notifyDataSetChanged();

您也可以将您从数据库中获取的每个元素添加到列表的前面,以便以相反的顺序获取它:

public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) {
        UserInformation sI = dataSnapshot.getValue(UserInformation.class);
        listScore.addFirst(sI);
        adapter.notifyDataSetChanged();
    }

并将listScore的声明改为:

final LinkedList<UserInformation> listScore = new LinkedList<>();

【讨论】:

  • @AbAppletic:如果您有更好的答案,请提供它作为答案。
  • @FrankvanPuffelen 我知道如何使用 RecyclerView 但不使用 ListView。不过,这个答案没有足够的信息......
  • 嗨 rhari,感谢您回答这个问题。我找到了这个方法,但我似乎没有把它融入我的方法的理想,你能更具体地说明我是如何写的吗?非常感谢指导
  • 编辑了我的答案,看看。
  • 感谢 Rhari,很抱歉打扰您宝贵的时间来帮助解决我的问题.....非常感谢
【解决方案2】:

如果你想以相反的顺序创建一个额外的键并存储 newKey = value(multiplied by)-1 而不是简单的 order by。 我通过反转 ArrayList 尝试了其他解决方案,但是当您将新数据添加到现有列表时,它会变得最糟糕。

As you can see my priority score in negative so I can write

databaseReference = FirebaseDatabase.getInstance().getReference() .child("node").child("event").orderByChild("priorityScore");

【讨论】:

  • 欢迎来到 StackOverflow。请通过添加示例代码使您的答案更易于理解。如果您将问题中的代码的更新版本添加到您的答案中,这将非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2012-04-05
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 2013-12-13
相关资源
最近更新 更多