【问题标题】:NullPointerException Error Attempt to invoke virtual method error on a null object referenceNullPointerException 错误尝试在空对象引用上调用虚拟方法错误
【发布时间】:2018-11-20 01:30:28
【问题描述】:

我正在制作一个语言学习程序。我正在做的是对每组单词进行测试。 没有编译错误;但是,根据我的 logcat,我的适配器上有一个 nullpointerexception。我不确定为什么会这样。

我的适配器

if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(this.layout, parent, false);
        holder.answer = (EditText)convertView.findViewById(R.id.answer);

        convertView.setTag(holder);
    }else{
        holder = (ViewHolder)convertView.getTag();
    }

    holder.ref = position;

    final EditText answer = (EditText)convertView.findViewById(R.id.answer);
    final Test listViewItem = TestList.get(position);

    holder.answer.setText(listViewItem.getAns());

    if(listItem == null)
        listItem = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);

    Test currenttest = TestList.get(position);

    TextView Qunum = (TextView) listItem.findViewById(R.id.Qnum);
    Qunum.setText(currenttest.getQnum());

    TextView Kore = (TextView) listItem.findViewById(R.id.Korean1);
    Kore.setText(currenttest.getK());

    TextView Prono = (TextView) listItem.findViewById(R.id.Pronounciation);
    Prono.setText(currenttest.getPron());

    return listItem;

}

需要意图的活动

getScore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i=0;i<20;i++){
                View view=listview.getChildAt(i);
                EditText editText=view.findViewById(R.id.answer);
                String string = editText.getText().toString();
                inputans.add(string);
            }
            count = 0;
            for(int x = 0; x < 20; x++){
                if(answers.get(x) == inputans.get(x)){
                    count++;
                }
            }
            Intent intent = new Intent(numbertest.this, dicselect.class);
            intent.putExtra("score", count);
            if(count<10){
                intent.putExtra("message", "Work Harder !!");
                startActivityForResult(intent, 1);
            }
            else if(count<=15){
                intent.putExtra("message", "Great !!");
                startActivityForResult(intent, 1);
            }
            else{
                intent.putExtra("message", "Well Done !!");
                startActivityForResult(intent, 1);
            }
            startActivity(intent);
        }
    });

我的自定义列表视图项的 xml 代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="390dp"
    android:layout_height="50dp"
    android:orientation = "horizontal">

    <TextView
        android:id="@+id/Qnum"
        android:text=""
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:textColor="#000000"
        android:textSize="20dp"
        android:layout_marginLeft="4dp"
        android:layout_marginTop = "4dp"
        android:layout_gravity="center"/>

    <TextView
        android:id="@+id/Korean1"
        android:text=""
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:layout_marginLeft="5dp"
        android:textSize = "20dp"/>

    <TextView
        android:text=""
        android:id="@+id/Pronounciation"
        android:layout_width="180dp"
        android:layout_height="40dp"
        android:layout_gravity = "center"
        android:layout_marginLeft = "4dp"
        android:textSize = "20dp"/>
</LinearLayout>

<LinearLayout
    android:layout_width="390dp"
    android:layout_height="50dp"
    android:orientation="horizontal">

    <TextView
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:layout_marginLeft="2dp"
        android:text = "Answer: "
        android:layout_gravity="center"
        android:textSize = "25dp"
        android:textColor = "#000000"
        />

    <EditText
        android:id="@+id/answer"
        android:layout_width="270dp"
        android:layout_height="40dp"
        android:textSize="20dp"
        android:layout_marginLeft="5dp"
        android:layout_gravity="center"
        />

</LinearLayout>

LogCat java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 在 com.example.rkdtm.koreanlearner.TestAdapter.getView(TestAdapter.java:73) 在 android.widget.AbsListView.obtainView(AbsListView.java:2366) 在 android.widget.ListView.makeAndAddView(ListView.java:2052)

【问题讨论】:

    标签: android nullpointerexception logcat


    【解决方案1】:

    我不确定this.layout 是什么,但不管它是什么,它应该是您的项目布局 XML 资源:

    convertView = LayoutInflater.from(parent.getCo).inflate(R.layout.row, parent, false);
    

    你不需要膨胀listItem,因为我认为它和convertView是一样的:

    TextView Qunum = (TextView) convertView.findViewById(R.id.Qnum);
    Qunum.setText(currenttest.getQnum());
    
    TextView Kore = (TextView) convertView.findViewById(R.id.Korean1);
    Kore.setText(currenttest.getK());
    
    TextView Prono = (TextView) convertView.findViewById(R.id.Pronounciation);
    Prono.setText(currenttest.getPron());
    

    为了以防万一,当您在TextView 上设置文本时,请确保不要使用Integer

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 2020-03-26
      • 2016-03-13
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多