You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Java应用出现NullPointerException错误求助

Android RecyclerView Adapter NullPointerException 排查与解决

问题场景

开发Java Android应用时,RecyclerView的TermAdapter抛出空指针异常,错误指向holder.termItemView.setText(name)语句,提示在空对象上调用setText方法。

错误日志

2022-08-04 21:01:08.374
9858-9858/com.erample.myapplication E/AndroidRuntime: FATAL EXCEPTION:
main
    Process: com.erample.myapplication, PID: 9858
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.erample.myapplication.ui.TermAdapter.onBindViewHolder(TermAdapter.java:61)
        at com.erample.myapplication.ui.TermAdapter.onBindViewHolder(TermAdapter.java:18)

相关代码

TermAdapter 实现代码

public class TermAdapter extends RecyclerView.Adapter<TermAdapter.TermViewHolder> {
    class TermViewHolder extends RecyclerView.ViewHolder{
        private final TextView termItemView;
        private TermViewHolder(View itemView){
            super(itemView);
            termItemView=itemView.findViewById(R.id.term_detail_Term_Name);
            itemView.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                    final Terms current=mTerms.get(position);
                    Intent intent=new Intent(context, CourseList.class);
                    intent.putExtra("termID", current.getTermID());
                    intent.putExtra("termName", current.getTermName());
                    intent.putExtra("termYear", current.getTermYear());
                    intent.putExtra("termStartDate", current.getTermStartDate());
                    intent.putExtra("termEndDate", current.getTermEndDate());
                    context.startActivity(intent);
                }
            });
        }
    }
    private List<Terms> mTerms;
    private final Context context;
    private final LayoutInflater mInflater;
    public TermAdapter(Context context){
        mInflater=LayoutInflater.from(context);
        this.context=context;
    }

    @NonNull
    @Override
    public TermAdapter.TermViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView=mInflater.inflate(R.layout.term_list_item,parent, false);
        return new TermViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull TermAdapter.TermViewHolder holder, int position) {
        if(mTerms!=null){
            Terms current=mTerms.get(position);
            String name= current.getTermName();
            holder.termItemView.setText(name);
        }
        else {
            holder.termItemView.setText("No term name");
        }
    }
    public void setTerms(List<Terms> terms){
        mTerms=terms;
        notifyDataSetChanged();
    }

    @Override
    public int getItemCount() {
        if(mTerms!=null){
            return mTerms.size();
            }
        else return 0;
    }
}

提供的XML布局代码(非RecyclerView Item布局)

<LinearLayout
    android:id="@+id/termLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/term_detail_Term_Name"
        android:layout_width="225dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="@string/term_name"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/term_detail_Term_Year"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="@string/term_year"
        android:textAlignment="textEnd"
        app:layout_constraintRight_toRightOf="@+id/term_detail_Term_Name"
        app:layout_constraintTop_toBottomOf="parent" />
</LinearLayout>

排查与解决

核心问题是termItemView为null,即findViewById(R.id.term_detail_Term_Name)未找到对应View,原因及解决步骤:

  • 布局不匹配:Adapter中加载的是R.layout.term_list_item,但你提供的XML代码是详情页布局(从term_detail_Term_Name的命名可判断),而非RecyclerView的Item布局。term_list_item.xml中大概率没有这个ID的TextView,导致查找失败。
  • 解决步骤:
    1. 打开res/layout/term_list_item.xml,检查其中是否存在ID为term_detail_Term_Name的TextView。
    2. 若Item布局里的TextView ID不同,将ViewHolder中的findViewById参数改为Item布局中实际的ID。
    3. 若确认ID正确,执行Build -> Clean Project后重新构建,避免R文件缓存问题。
    4. 检查是否存在多分辨率文件夹下的同名布局文件,确保所有布局中都包含目标TextView。

内容的提问来源于stack exchange,提问作者edweird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:06:19