从 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));
}
这里是我的代码:
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));
}