Сортировать RecyclerView по дате

Я пытаюсь отсортировать 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);


}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
3 301
2

Ответы 2

Я думаю, что указанная ниже строка создает проблему.

String Date =pendingTrajectPOJO.getDate();

Переименуйте Date во что-нибудь другое и посмотрите, работает ли это

Я просто показываю ошибку, которую вы получали. Можете ли вы показать детали GetAllTrajects (). Возможно, какая-то строка в этом коде вызывает исключение, которое не позволяет выполнить showPendingTraject ().

meShakti 28.05.2018 12:35

Простым решением будет сохранение / ввод данных в вашу дату хранения 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 был один, я пытался сделать что-то еще, но показывает другую ошибку

Luis 28.05.2018 12:18

Не могли бы вы указать, какое исключение вы получаете?

Parag Pawar 28.05.2018 12:20

И было бы полезно, если бы вы могли показать свой полный код для этого действия!

Parag Pawar 28.05.2018 12:21

Сделал, дело :)

Luis 28.05.2018 12:21

Просто исключение нулевого указателя, проблема в том, что я использую adapter.notifyDataSetChanged ();

Luis 28.05.2018 12:31

Проблема в том, что вы не инициализируете свой адаптер и даже не настроили его на recyclerview.

Parag Pawar 28.05.2018 12:34

Вы сделали какой-нибудь специальный адаптер типа PendingTrajectPOJO?

Parag Pawar 28.05.2018 12:35

@ParaPawar Я инициализировал, и теперь он отправляет уведомление, но не заказывает

Luis 28.05.2018 12:38

Вы пробовали мой способ использования времени в миллисекундах вместо String?

Parag Pawar 28.05.2018 12:40

Да, но как я могу сравнивать две переменные в возвращении?

Luis 28.05.2018 13:05

Спасибо @ParagPawar, но я не могу сравнивать два длинных

Luis 28.05.2018 15:37

Другие вопросы по теме