【问题标题】:OnClickListener NullPointerExpection Java [duplicate]OnClickListener NullPointerExpection Java [重复]
【发布时间】:2023-03-26 12:56:02
【问题描述】:

我已经使用 android studio 在 Java 中构建了一个 RecyclerViewer 应用程序。 当我运行应用程序时它崩溃了,当我检查 Logcat 时,我发现我的适配器中有一个空指针异常。 onBindViewHolder 方法。 这涵盖了第 49 行。

@Override
    public void onBindViewHolder(@NonNull ContactsAdapter.ViewHolder holder, int position) {
        holder.txtName.setText(contacts.get(position).getName());
        holder.txtName.setText(contacts.get(position).getEmail());
        Glide.with(context).asBitmap().load(contacts.get(position).getImage()).into(holder.image);

        holder.parent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, contacts.get(position).getName() + " Clicked", Toast.LENGTH_SHORT).show();
            }
        });


    }

Logcat 日志

    java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.cardview.widget.CardView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.learningapplication.ContactsAdapter.onBindViewHolder(ContactsAdapter.java:49)
        at com.example.learningapplication.ContactsAdapter.onBindViewHolder(ContactsAdapter.java:19)

编辑: 完整代码如下:

package com.example.learningapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;

import java.util.ArrayList;

public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder>{
    private Context context;

    ArrayList<Contacts> contacts = new ArrayList<>();

    public void setContacts(ArrayList<Contacts> contacts) {
        this.contacts = contacts;
        notifyDataSetChanged();
    }

    public ContactsAdapter(Context context) {
        this.context = context;
    }

    public ContactsAdapter() {
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contacts_layout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ContactsAdapter.ViewHolder holder, int position) {
        holder.txtName.setText(contacts.get(position).getName());
        holder.txtName.setText(contacts.get(position).getEmail());
        Glide.with(context).asBitmap().load(contacts.get(position).getImage()).into(holder.image);

        holder.parent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, contacts.get(position).getName() + " Clicked", Toast.LENGTH_SHORT).show();
            }
        });


    }

    @Override
    public int getItemCount() {
        return contacts.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{
        private TextView txtName;
        private TextView txtEmail;
        private ImageView image;
        private CardView parent;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            txtName = itemView.findViewById(R.id.txtName);
            txtEmail = itemView.findViewById(R.id.txtEmail);
            image = itemView.findViewById(R.id.image);

        }

    }
}

``

【问题讨论】:

  • 方法之间的 30 行差异告诉我我们没有看到完整的代码,但答案可能相同:holder.parent 为空。
  • 什么是父级,这似乎是 null 添加代码 sn-p 用于父级视图
  • 我已经添加了整个代码。
  • 请在您的查看器中初始化您的卡片视图。
  • 谢谢 :) 我只需要初始化卡片视图 - parent = itemView.findViewById(R.id.parent); private CardView parent;

标签: java android nullpointerexception


【解决方案1】:

据我了解:
holder.parent - 这是null
检查你的初始化

【讨论】:

  • 这应该是一个评论。
  • (请记住,新用户要等到 50 声望 @PrajwalWaingankar 才能离开 cmets)
  • 当我发布这个时,只有 onBindViewHolder 代码。而且我无法在 Answer 中要求更多信息,那么,我该如何回答呢?
猜你喜欢
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多