Получение исключения нулевой точки при нажатии кнопки удаления в RecyclerView

 public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
  myViewHolder.mName.setText(downModels.get(i).getName());
    myViewHolder.mDownload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DownloadTask();
        }
    });


myViewHolder.mDelete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String pdfName = downModels.get(i).getName();

        if(pdfName != null) {
            pdfName = pdfName.replace("", "")+".pdf";

            File file = new File(context.getFilesDir(), pdfName);
            try {
                if (file.exists())
                    file.delete();
                Log.e("file","file"+file.getAbsolutePath());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

 }
});

При нажатии кнопки «Удалить» происходит сбой приложения.

2020-03-01 22: 50: 55.461 16800-16800 / com.solutions.rsaggarwal E / Android Время выполнения: НЕОБХОДИМОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.solutions.rsaggarwal, PID: 16800 java.lang.NullPointerException: попытка вызвать виртуальный метод ' java.io.File android.content.Context.getFilesDir () 'для ссылки на нулевой объект в com.solutions.rsaggarwal.MyAdapter $ 2.onClick (MyAdapter.java:70) в android.view.View.performClick (View.java : 7125) на android.view.View.performClickInternal (View.java:7102) на android.view.View.access 3500 долларов (View.java:801) на android.view.View $ PerformClick.run (View.java:27336 ) в android.os.Handler.handleCallback (Handler.java:883) в android.os.Handler.dispatchMessage (Handler.java:100) в android.os.Looper.loop (Looper.java:214) в android.app .ActivityThread.main (ActivityThread.java:7356) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java : 492) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930)


person user12680031    schedule 01.03.2020    source источник
comment
Что такое context?   -  person S-Sh    schedule 01.03.2020
comment
убедитесь, что вы установили правильный findviewbyId кнопки в элементе recyclerview в адаптере   -  person AndroWaqar    schedule 01.03.2020
comment
Контекстный контекст; и я правильно установил кнопку,   -  person user12680031    schedule 01.03.2020
comment
вы устанавливаете контекст из своей активности / фрагмента в конструкторе MyAdapter.   -  person ljk    schedule 01.03.2020
comment
Ставлю из фрагмента   -  person user12680031    schedule 01.03.2020


Ответы (1)


Похоже, что context, который вы передаете в качестве аргумента в своем классе адаптера, имеет значение null. В качестве альтернативы вы можете использовать контекст, прикрепленный к itemView, как показано ниже.

  Context context = myViewHolder.itemView.getContext();
  File file = new File(context.getFilesDir(), pdfName);
  try {
        if (file.exists())
                 file.delete();
         Log.e("file","file"+file.getAbsolutePath());
       } catch (Exception e) {
                e.printStackTrace();
       }
    }
person Oscar Emilio Perez Martinez    schedule 01.03.2020