【发布时间】: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