我正在尝试按日期对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);
}
答案 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);
}
});