Я создал представление ресайклера, которое отображает изображения и текст из Sqlite в виде списка. Чтобы передать имя выбранного элемента в новое действие, я использовал намерение для передачи данных, но когда мое намерение было вызвано, мое приложение было разбито, и оно показывает Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference

Recyclerview

ArrayList<byte[]> list_image;
private LayoutInflater mInflater;
private Context context;
private ArrayList<String> list_name;

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

        holder.listname.setText(String.valueOf(list_name.get(position)));

       
        Bitmap bmp = BitmapFactory.decodeByteArray(list_image.get(position), 0, list_image.get(position).length);
        ImageView image = holder.imgname;
        
        image.setImageBitmap(bmp);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(view.getContext(),AddItems.class);
                intent.putExtra("listname", String.valueOf(list_name.get(position)));
                context.startActivity(intent);

            }
        });
    }

Additems

  lisname = findViewById(R.id.listname_dis);

        Intent intent = getIntent();
        String dataTransmited=intent.getStringExtra("listname");
        lisname.setText(dataTransmited);
    }

Logcat:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference
        at com.Karthi.check.CustomAdapter$1.onClick(CustomAdapter.java:76)
0
Kingg 2 Сен 2020 в 19:42

2 ответа

Лучший ответ

В пользовательском адаптере инициализируйте private Activity activity;

Затем

public CustomAdapter(Activity activity,....){

 this.activity = activity;
......
.....
....
}


   use  activity.startActivity(intent); in your OnClickListerner


holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(view.getContext(),AddItems.class);
                intent.putExtra("listname", String.valueOf(list_name.get(position)));
                activity.startActivity(intent);

            }

Также в основной деятельности добавьте

CustomAdapter ca = new CustomAdapter(MainActivity.this,this,......)
2
Karthickyuvan 2 Сен 2020 в 17:15

поскольку ваш "контекст" равен нулю. Попробуйте следующее:

view.getContext().startActivity(intent)

вместо этого

context.startActivity(intent)
1
Faisal Khan 2 Сен 2020 в 17:07