如何在 Android 中通过 Firebase Childs 按升序对列表进行排序

Posted

技术标签:

【中文标题】如何在 Android 中通过 Firebase Childs 按升序对列表进行排序【英文标题】:How to Sort List in Ascending Order by Firebase Childs in Android 【发布时间】:2018-05-08 11:54:57 【问题描述】:
ref.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 

                list = new ArrayList<>();
                for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren())

                    Model userdetails = dataSnapshot1.getValue(Model.class);
                    Model listdata = new Model();

                    String name = userdetails.getName();
                    String points = userdetails.getPoints();

                    listdata.setName(name);
                    listdata.setPoints(points);
                    list.add(listdata);

                

                Adapter recyclerview = new Adapter(list, getActivity());
                RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(getActivity());
                recycler.setLayoutManager(layoutmanager);
                recycler.setItemAnimator( new DefaultItemAnimator());
                recycler.setAdapter(recyclerview);

            

这是我用于从 firebase 检索数据的代码。

下面是数据。

我想按升序但按点对数据进行排序。 最大点将首先出现。

任何人都可以帮助我吗?谢谢。

【问题讨论】:

【参考方案1】:

试试这个,

public class Model implements Comparable<Model> 

@Override
    public int compareTo(@NonNull Model model) 
        String points= model.getPoints();
        return this.points.compareTo(model);
    

并将Collections.sort(list) 用于数组列表。

注意:使用整数代替字符串。

【讨论】:

【参考方案2】:

试试这个

Collections.sort(list, new Comparator<Model>() 
@Override
public int compare(Model lhs, Model rhs) 
    return lhs.getName().compareTo(rhs.getName());
);

【讨论】:

我想按点排序,而不是按名称排序,否则,它正在工作 更改 lhs.getPoints().compareTo(rhs.getPoints()); 只比较第一个数字 我已经修改了一些,但你的回答对我有帮助。【参考方案3】:
Collections.sort(list, new Comparator<Model>() 
                    @Override
                    public int compare(Model lhs, Model rhs) 
                        return Integer.parseInt(rhs.getPoints()) - Integer.parseInt(lhs.getPoints());
                    );

问题是它在字符串中,我正在比较字符串,所以我先将它转换为整数并进行比较。

【讨论】:

以上是关于如何在 Android 中通过 Firebase Childs 按升序对列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift ios中通过键值读取子数据或过滤firebase数据

在 Firebase 云功能中通过 nodemailer 发送邮件是不是需要计费帐户?

在 Firebase 中通过电子邮件查找 UID

想要在flutter中通过底部导航栏的总价

如何在 Android 中通过 FFmpeg 解码音频

如何在 Android 中通过 Wifi 获取位置?