Я пытаюсь отсортировать RecyclerView по дате, но я перепробовал слишком много вещей и не знаю, что попробовать сейчас. Проблема в строке адаптер.notifyDataSetChanged ();, потому что, если я не помещаю, не показывает мне ошибку, но также не обновляет recyclerview
Это то, что у меня есть сейчас, и показывает мне эту ошибку.
Unable to start activity ComponentInfo{st.stc/sharetaxi.sharetaxicabdriver.PendingTrajectRecyclerView}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged()' on a null object reference'
Прежде всего, я помещаю все траектории в метод 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();
}
Внутри метода GetAllTrajects, когда я помещаю всю информацию, я вызываю метод showPendingTraject ()
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);
}




Я думаю, что указанная ниже строка создает проблему.
String Date =pendingTrajectPOJO.getDate();
Переименуйте Date во что-нибудь другое и посмотрите, работает ли это
Простым решением будет сохранение / ввод данных в вашу дату хранения PendingTrajectPOJO в миллисекундах, которая будет иметь тип long вместо 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, отсортируйте его, просто не забудьте преобразовать timeInMilliseconds в дату при отображении в RecyclerView.
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);
}
});
Привет, @ParagPawar, спасибо, что ответили мне. Я обновил сообщение, проблема заключалась в том, что размер Recycler был один, я пытался сделать что-то еще, но показывает другую ошибку
Не могли бы вы указать, какое исключение вы получаете?
И было бы полезно, если бы вы могли показать свой полный код для этого действия!
Сделал, дело :)
Просто исключение нулевого указателя, проблема в том, что я использую adapter.notifyDataSetChanged ();
Проблема в том, что вы не инициализируете свой адаптер и даже не настроили его на recyclerview.
Вы сделали какой-нибудь специальный адаптер типа PendingTrajectPOJO?
@ParaPawar Я инициализировал, и теперь он отправляет уведомление, но не заказывает
Вы пробовали мой способ использования времени в миллисекундах вместо String?
Да, но как я могу сравнивать две переменные в возвращении?
Спасибо @ParagPawar, но я не могу сравнивать два длинных
Я просто показываю ошибку, которую вы получали. Можете ли вы показать детали GetAllTrajects (). Возможно, какая-то строка в этом коде вызывает исключение, которое не позволяет выполнить showPendingTraject ().