按日期排序RecyclerView

时间:2018-05-28 09:19:31

标签: java android collections android-recyclerview nullpointerexception

我正在尝试按日期对RecyclerView进行排序,但是我尝试了很多东西而且我现在不知道该尝试什么。问题出现在 adapter.notifyDataSetChanged(); 行中,因为如果我没有把它显示错误但不会更新recyclerview

这就是我现在所拥有的,并向我显示错误。

  

无法启动活动ComponentInfo {st.stc/sharetaxi.sharetaxicabdriver.PendingTrajectRecyclerView}:java.lang.NullPointerException:尝试调用虚方法'void android.support.v7.widget.RecyclerView $ Adapter.notifyDataSetChanged()'on空对象引用'

首先,我将所有轨迹放在方法 GetAllTrajects()中,并在Collections.sort中解析TextView的日期。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pending_traject_recycler_view);

    listPendingTraject=new ArrayList<>();
    recyclerPendingTraject = (RecyclerView)findViewById(R.id.pendingTrajectRecyclerView);
    recyclerPendingTraject.setLayoutManager(new LinearLayoutManager(this));

      GetAllTrajects();

    Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
        @Override
        public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {
            String Date = pendingTrajectPOJO.getDate();

            String Date1 = t1.getDate();

            Date date=null,date1=null;

            SimpleDateFormat formatDate = new SimpleDateFormat("dd/MMM/yyyy");
            try {
                date = formatDate.parse(Date);
                date1 = formatDate.parse(Date1);
            } catch (ParseException e) {
                e.printStackTrace();
            }


            return date.before(date1) ? 1 : 0;

        }
    });
    adapter.notifyDataSetChanged();
}

当我把所有信息调用方法 showPendingTraject()

时,内部方法GetAllTrajects
  private void showPendingTraject() {
    listPendingTraject.add(new PendingTrajectPOJO(nameUsers,coordenatesOriginBundle,Origin,Destination,DataIHora,coordenatesDestiBundle,contadorCordenades));

    Log.d("ID",""+nomUser);
    adapter = new AdapterPendingTraject(listPendingTraject);
    recyclerPendingTraject.setAdapter(adapter);


}

2 个答案:

答案 0 :(得分:0)

我认为下面提到的行正在产生问题。

String Date =pendingTrajectPOJO.getDate();

将日期重命名为其他内容并查看其是否有效

答案 1 :(得分:0)

一个简单的解决方案是在PendingTrajectPOJO存储日期中存储/输入数据,以毫秒为单位,而不是String类型,然后您可以轻松地比较长值并对其进行排序。

假设您的日期是28/05/2018,那么您可以使用以下方法以毫秒为单位获取它:

String givenDateString = "28/05/2018"; 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
   Date mDate = sdf.parse(givenDateString);
   long timeInMilliseconds = mDate.getTime();
   //store this timeInMilliseconds in your POJO object
   System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
        e.printStackTrace();
}

并使用timeInMilliseconds对其进行排序,只是不要忘记在RecyclerView中显示时将timeInMilliseconds转换为日期。

 Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
    @Override
    public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {

        long Date = pendingTrajectPOJO.getDate();
        long Date1 = t1.getDate();

        return Date.compareTo(Date1);
    }
});
相关问题