从 Firebase 获取数据并使其进入前 100 名 activity

Get data from Firebase and make it a top 100 ranking activity

这里是我的代码:

 private RecyclerView recycleRank;
private LinearLayoutManager layManRank;
private FirebaseRecyclerAdapter<Word, RankingActivity.RankingViewHolder> recAdapterRank;

...

DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference("Word");
    Query personsQuery = personsRef.orderByChild("count");

    recycleRank.hasFixedSize();
    layManRank = new LinearLayoutManager(this);
    layManRank.setReverseLayout(true);
    layManRank.setStackFromEnd(true);
    recycleRank.setLayoutManager(layManRank);

因此 .setReverseLayout 计数按降序显示。没有它,它从最小的数字开始,然后下降到最高的。但应该是反过来的。

recAdapterRank = new FirebaseRecyclerAdapter<Word, RankingViewHolder>(personsOptions) {
        @Override
        protected void onBindViewHolder(RankingActivity.RankingViewHolder holder, final int position, final Word model) {
            holder.setWord(model.getWord());
            long score = model.getCount();
            holder.setScore(String.valueOf(score));
            holder.setRank(String.valueOf(holder.getAdapterPosition()));
        }

holder.setRank(String.valueOf(holder.getAdapterPosition())); 在此,相应的数字在排名中输出。

所以 Activity 应该是这样的

# Word Score 1 Tree 12 2 Wood 9

但在我的例子中,因为列表是颠倒的,所以编号从最高的数字开始,一直到 0。

我该如何处理?我需要一个 Int 数组或类似的东西吗? 怎么可能让排名只有 100 个词呢?目前数据库中的所有单词都在排名中。

谢谢大家

这正是我使用 Firestore 的原因。没有确切的方法来做类似的事情:myQuery.orderBy("field", DESCENDING) with Firebase Database.

你可以通过多种方式绕过这个,我第一个想到的是Collections.reverse(mylist);

要限制为第 100 个,请在查询中使用 limitToFirst(100)

好的,您可以处理。

Query personsQuery = personsRef.orderByChild("count").limitToLast(100);

感谢@Hocine B

要反转它,您可以使用:

recAdapterRank = new FirebaseRecyclerAdapter<Word, RankingViewHolder>(personsOptions) {
    @Override
    protected void onBindViewHolder(RankingActivity.RankingViewHolder holder, final int position, final Word model) {
        holder.setWord(model.getWord());
        long score = model.getCount();
        holder.setScore(String.valueOf(score));

        //Here is the Code
        int realRank = 100 - holder.getAdapterPosition();

        holder.setRank(String.valueOf(realRank));
    }