Как исправить переход к следующему действию в адаптере (Context.getPackageName()' для нулевой ссылки на объект)


в моем проекте я работаю по модернизации и делаю адаптер и модель
Как исправить переход к следующему действию в адаптере (Context.getPackageName()' для нулевой ссылки на объект) проблема в том, что после нажатия на карточку для перехода к следующему действию приложение вылетает из-за ошибки:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    at android.content.ComponentName.<init>(ComponentName.java:128)
    at android.content.Intent.<init>(Intent.java:5390)
    at ir.hmotamed.notline.adapter.NoteAdapter$1.onClick(NoteAdapter.java:54)
    at android.view.View.performClick(View.java:6261)

мой код адаптера:

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.notesViewHoler> {


List<Querynotes> querynotes;
private Context mContext;

public NoteAdapter(List<Querynotes> querynotes, MainActivity mainActivity){

    this.querynotes=querynotes;

}

@NonNull
@Override
public notesViewHoler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.note_row,parent,false);
    return new notesViewHoler(view);

}

@Override
public void onBindViewHolder(@NonNull final notesViewHoler holder, int position) {

    final Querynotes queryPostses=querynotes.get(position);
    holder.title.setText(queryPostses.getTitle());
    holder.note.setText(queryPostses.getNote());
    holder.body.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent=new Intent(mContext,EditNoteActivity.class);
            intent.putExtra("nid",queryPostses.getId());
            intent.putExtra("ntitle",queryPostses.getTitle());
            intent.putExtra("ndesc",queryPostses.getNote());
            mContext.startActivity(intent);

        }
    });

}

@Override
public int getItemCount() {

    return querynotes.size();

}

public class notesViewHoler extends RecyclerView.ViewHolder{

    int id;
    CardView parent;
    TextView title;
    TextView note;
    RelativeLayout body;
    public notesViewHoler(View itemView) {
        super(itemView);
        parent=itemView.findViewById(R.id.rv_note_row);
        title=itemView.findViewById(R.id.tv_header_title);
        note=itemView.findViewById(R.id.tv_body_desc);
        body=itemView.findViewById(R.id.rv_row_body);

    }
}

мне нужно, чтобы после клика по моему элементу перейти к следующему действию
но после щелчка мое приложение вылетело и получило ошибку в строке 54 для моего адаптера
строка 54 это:

Intent intent=new Intent(mContext,EditNoteActivity.class);

@ADM не дублируется! это не связано с int , но известно, что исправлено mohammadReza ответом

hmotamed 23.04.2019 15:11
1
1
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы должны инициализировать свой context перед его использованием:

public NoteAdapter(List<Querynotes> querynotes, MainActivity mainActivity){
mContext = mainActivity; \\ add this line
    this.querynotes=querynotes;

}

дамет гарм братан ;)! я сделал то же самое, но вместо mainActivity я установил Context! <3

hmotamed 23.04.2019 15:04

fadawt :) типа йадет наре!

mohammadReza Abiri 23.04.2019 15:05

монтазерам тайм тамом беше лайк конам :D

hmotamed 23.04.2019 15:11

;) стек ханг кардэ алан мигэ в дг че забание!! :)

mohammadReza Abiri 23.04.2019 15:14

Ваш контекст равен нулю, поэтому происходит сбой. Убедитесь, что вы передаете контекст в конструкторе адаптеров следующим образом:

public NoteAdapter(List<Querynotes> querynotes, Context mContext){

    this.querynotes=querynotes;
    this.mContext=mContext;

}

и в вашей деятельности, где вы создаете адаптер:

NoteAdapter mNoteAdapter = new NoteAdapter(queryNotes, MainActivity.class);

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