“Вылетает” активность

216
09 марта 2018, 14:50

при нажатии на элемент списка RecyclerView открывается новая активность за это отвечает код в адаптере:

    public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
    final Recept recept = receptes.get(position);
    holder.imageView.setImageResource(recept.getImage());
    holder.nameView.setText(recept.getName());
    holder.discriptionView.setText(recept.getDiscription());
    holder.cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, LastActivity.class);
            intent.putExtra("name",recept.getName());
            intent.putExtra("disc",recept.getDiscription());
            context.startActivity(intent);
        }
    });
}

При нажатии, LastActivity вылетает и осуществляется переход на главную активность, почему и как это исправить?

Ошибка из лога:

    03-07 19:04:43.387 12128-12323/com.example.len.recept E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f8fb64240
03-07 19:04:43.973 12128-12128/com.example.len.recept E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.example.len.recept, PID: 12128
                                                                        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:4686)
                                                                            at com.example.len.recept.DataAdapter$1.onClick(DataAdapter.java:45)
                                                                            at android.view.View.performClick(View.java:5317)
                                                                            at android.view.View$PerformClick.run(View.java:21648)
                                                                            at android.os.Handler.handleCallback(Handler.java:815)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                            at android.os.Looper.loop(Looper.java:207)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5927)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)

Это вот эта строчка:

Intent intent = new Intent(context, LastActivity.class);

Код адаптера:

class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private List<Recept> receptes;
DataAdapter(Context context, List<Recept> receptes) {
    this.receptes = receptes;
    this.inflater = LayoutInflater.from(context);
}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.adapter_item, parent, false);
    return new ViewHolder(view);
}
@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, int position) {
    final Recept recept = receptes.get(position);
    holder.imageView.setImageResource(recept.getImage());
    holder.nameView.setText(recept.getName());
    holder.discriptionView.setText(recept.getDiscription());
    holder.cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, LastActivity.class);
            intent.putExtra("name",recept.getName());
            intent.putExtra("disc",recept.getDiscription());
            context.startActivity(intent);
        }
    });
}
@Override
public int getItemCount() {
    return receptes.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    final ImageView imageView;
    final TextView nameView, discriptionView;
    final CardView cv;
    ViewHolder(View view){
        super(view);
        imageView = (ImageView)view.findViewById(R.id.image);
        nameView = (TextView) view.findViewById(R.id.textView);
        discriptionView = (TextView) view.findViewById(R.id.textView2);
        cv = (CardView) view.findViewById(R.id.cv_rv);
    }
}
}

Код из активности:

        for(int i = 0;i<infoListText.size();i++){
        receptList.add(new Recept(infoListText.get(i),discriptionListText.get(i)));
    }
    adapter = new DataAdapter(Main2Activity.this, receptList); // Сюда засунуть ArrayList<Recept> надо!
    recyclerView.setAdapter(adapter);
Answer 1

В приведенном вами коде член класса DataAdapter

    private Context context;

нигде не инициализирован. Поэтому в итоге вы получаете NullPointerException.

Kaк исправить:

class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private Context context;
    private LayoutInflater inflater;
    private List<Recept> receptes;
    DataAdapter(Context context, List<Recept> receptes) {
        this.context = context;
// и т.д.
READ ALSO
Получение доступа к вебсокету через SOCKS5

Получение доступа к вебсокету через SOCKS5

Есть проект на Spring MVC и я хочу подключиться с фронтенда (JavaScript) socketio веб сокету через Socks5

222
Java: ООП, Конструкторы

Java: ООП, Конструкторы

Не знаю как точно сформулировать вопрос в гугл, и где искать ответЕсть класс Nclass и есть HashMap (вне этого класса) в котором ключ это поле name класса...

214
jQuery не удается отменить отправку формы

jQuery не удается отменить отправку формы

На пустой странице есть формаМоя задача - выполнить свой код вместо отправки этой формы

208