Получить данные из Firebase и сделать его топ-100 рейтинга деятельности - PullRequest
0 голосов
/ 15 октября 2018

вот мои коды:

 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())); Здесь соответствующее число выводится в рейтинге.

Таким образом, действие должно выглядеть следующим образом

# Word Score 1 Tree 12 2 Wood 9

Но в моем случае, поскольку список перевернут, нумерация начинается с наибольшего числа и продолжается до 0.

Как я могу справиться с этим?Мне нужен Int Array или что-то в этом роде?И как можно сделать рейтинг длиной всего 100 слов?На данный момент в рейтинге присутствуют все слова из базы данных.

Спасибо, ребята

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Хорошо, так что вы можете справиться с этим.

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));
    }
0 голосов
/ 15 октября 2018

Именно поэтому я использую Firestore.Нет точного способа сделать что-то вроде: myQuery.orderBy ("field", DESCENDING) с базой данных Firebase.

Вы можете обойти это несколькими способами, первое, что приходит мне в голову: Collections.reverse(mylist);

Чтобы ограничить до 100st, используйте limitToFirst(100) в своем запросе

...