Android自定义列表应用因RecyclerView崩溃,请求排查问题
Android自定义列表应用崩溃排查与修复
核心崩溃原因:空指针异常(NullPointerException)
在MainActivity中,你仅声明了ArrayList<row_data> arrContacts;,但未初始化该集合,直接调用arrContacts.add()时会触发空指针,导致应用崩溃。
修复步骤
1. 初始化ArrayList
在onCreate方法中,调用add()前先初始化集合:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerContact); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 新增初始化代码 arrContacts = new ArrayList<>(); arrContacts.add(new row_data("Christopher","9876513450",R.drawable.peter)); // 后续add代码保持不变... RecyclerAdapter contactAdapter = new RecyclerAdapter(this, arrContacts); recyclerView.setAdapter(contactAdapter); }
注:创建适配器时建议直接传this(Activity上下文)而非getApplicationContext(),避免不必要的上下文生命周期问题。
2. 其他潜在问题检查
- 图片资源存在性:确保
R.drawable.peter、R.drawable.avatar2等所有引用的图片都存在于res/drawable目录,不存在会触发Resources.NotFoundException。 - RecyclerView布局高度优化:当前布局中RecyclerView的
android:layout_height="wrap_content",若列表项较多,建议改为match_parent避免滚动异常:
<androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerContact" />
- row_data类封装优化:当前类字段为默认包访问权限,建议添加getter方法遵循封装原则:
public class row_data { private String name, number; private int image; public row_data(String name, String number, int image) { this.image = image; this.name = name; this.number = number; } public String getName() { return name; } public String getNumber() { return number; } public int getImage() { return image; } }
同时修改适配器对应调用逻辑:
@Override public void onBindViewHolder(@NonNull Viewholder holder, int position) { row_data data = arrContacts.get(position); holder.img.setImageResource(data.getImage()); holder.txtnumber.setText(data.getNumber()); holder.txtname.setText(data.getName()); }
验证修复
完成上述修改后重新编译运行,空指针崩溃会被解决,列表可正常加载显示。
内容的提问来源于stack exchange,提问作者thakur gupta
相关产品推荐
相关产品推荐

