Android Studio中RecyclerView适配器空指针异常问题求助
RecyclerView Adapter空指针异常解决(TextView对象为空)
问题原因
空指针异常出现在onBindViewHolder中调用setText时,说明holder.className或holder.subjectName为null——也就是在ClassViewHolder构造方法里,findViewById没有找到对应的控件实例。
解决步骤
核对布局文件控件ID
打开res/layout/class_item.xml,检查TextView控件的ID是否与代码中的R.id.class_tv、R.id.class_edit完全一致,注意拼写、大小写不能有任何差异(比如不能把class_edit写成class_edit_tv)。确认加载的布局文件正确
检查onCreateViewHolder中inflate方法传入的布局是否为R.layout.class_item,避免误加载其他布局导致找不到目标控件。添加空值防护(可选)
为避免后续类似崩溃,可在设置文本前增加判空逻辑,同时处理数据为空的情况:@Override public void onBindViewHolder(@NonNull ClassViewHolder holder, int position) { ClassItem currentItem = classItems.get(position); if (holder.className != null) { holder.className.setText(currentItem.getClassName() != null ? currentItem.getClassName() : ""); } if (holder.subjectName != null) { holder.subjectName.setText(currentItem.getSubjectName() != null ? currentItem.getSubjectName() : ""); } }
原问题代码
package com.eterces.bauetattendance; class ClassAdapter extends RecyclerView.Adapter<ClassAdapter.ClassViewHolder> { ArrayList<ClassItem> classItems; Context context; public ClassAdapter(Context context, ArrayList<ClassItem> classItems) { this.classItems = classItems; this.context = context; } public static class ClassViewHolder extends RecyclerView.ViewHolder { TextView className; TextView subjectName; public ClassViewHolder(@NonNull View itemView) { super(itemView); className = itemView.findViewById(R.id.class_tv); subjectName = itemView.findViewById(R.id.class_edit); } } @NonNull @Override public ClassViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.class_item, parent, false); return new ClassViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull ClassViewHolder holder, int position) { holder.className.setText(classItems.get(position).getClassName()); holder.subjectName.setText(classItems.get(position).getSubjectName()); } @Override public int getItemCount() { return classItems.size(); } }
报错信息
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.eterces.bauetattendance.ClassAdapter.onBindViewHolder(ClassAdapter.java:47) at com.eterces.bauetattendance.ClassAdapter.onBindViewHolder(ClassAdapter.java:14)
内容的提问来源于stack exchange,提问作者Avishak_poddar
相关产品推荐
相关产品推荐

