在 Android Studio 的 Java 应用中收到 NullPointerException 错误,看不到 id 问题

Receiving a NullPointerException Error in a Java App in Android Studio, cannot see problem with id

提问人:edweird 提问时间:8/5/2022 最后编辑:edweird 更新时间:8/8/2022 访问量:40

问:

收到此错误:

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)

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;
    }
}

从这里拉出:findViewById(R.id.term_detail_Term_Name);

    <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>

通常 - Java 和 XML 文件之间可能会断开连接 - 但这两个文件的名称相同。

我不确定我错过了什么——对我来说,这一切就像来自另一个星球的语言。任何帮助都是值得赞赏的。我浏览了一堆类似的票证 - 并检查了按 ID 查找和 XML ID 之间的联系。

其他上下文: 第 61 行是 holder.termItemView.setText(name);在此块中:@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);

java nullpointerException null

评论

1赞 Abra 8/5/2022
文件中的哪一行是第 61 行?根据您发布的堆栈跟踪,它在 method 中。TermAdapter.javaonBindViewHolder
0赞 edweird 8/6/2022
第 61 行是 holder.termItemView.setText(name);在此块中: @Override public void onBindViewHolder(@NonNull TermAdapter.TermViewHolder holder, int position) { if(mTerms!=null){ Terms current=mTerms.get(position);字符串名称= current.getTermName();holder.termItemView.setText(名称);
0赞 Abra 8/6/2022
您应该编辑您的问题并指出抛出 .问题详细信息应在问题中,而不是在对问题的评论中。也就是说,异常的原因显然是由于 null 或 null。你能调试你的代码来检查哪一个是空的吗?或者,如果 method 的方法参数为 null,则 method 可能会抛出。可以检查方法的源代码进行验证吗?如果是这样,请检查是否为 null。NullPointerExceptionholderholder.termItemViewsetTextNullPointerExceptionsetTextname

答: 暂无答案