java - 调用错误 EditText() 空对象引用
问题描述
我知道这可能是一个非常简单的解决方案,但我一辈子都无法让这部分代码为我的症状检查器工作。其他一切工作正常,但应用程序在诊断部分方法中完全崩溃。
这是导致问题的java文件的一部分(问题活动):
public class Questions extends AppCompatActivity {
private Button button2;
private RadioButton radioButton;
private RadioButton radioButton2;
private RadioButton radioButton3;
private RadioButton radioButton4;
private RadioButton radioButton5;
private RadioButton radioButton6;
private RadioButton radioButton7;
private RadioButton radioButton8;
private RadioButton radioButton9;
private RadioButton radioButton10;
private RadioButton radioButton11;
private RadioButton radioButton12;
private RadioButton radioButton13;
private RadioButton radioButton14;
private RadioButton radioButton15;
private RadioButton radioButton16;
private RadioButton radioButton17;
private RadioButton radioButton18;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_questions);
button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
opendiagnosis();
diagnosispart();
}
});
//Question 1
radioButton = findViewById(R.id.radioButton); //yes
radioButton2 = findViewById(R.id.radioButton20); //no
//Question 2
radioButton3 = findViewById(R.id.radioButton4); //yes
radioButton4 = findViewById(R.id.radioButton2); //no
//Question 3
radioButton5 = findViewById(R.id.radioButton6); //yes
radioButton6 = findViewById(R.id.radioButton5); //no
//Question 4
radioButton7 = findViewById(R.id.radioButton7); //yes
radioButton8 = findViewById(R.id.radioButton8); //no
//Question 5
radioButton9 = findViewById(R.id.radioButton9); //yes
radioButton10 = findViewById(R.id.radioButton10); //no
//Question 6
radioButton11 = findViewById(R.id.radioButton12); //yes
radioButton12 = findViewById(R.id.radioButton11); //no
//Question 7
radioButton13 = findViewById(R.id.radioButton13); //yes
radioButton14 = findViewById(R.id.radioButton14); //no
//Question 8
radioButton15 = findViewById(R.id.radioButton15); //yes
radioButton16 = findViewById(R.id.radioButton16); //no
//Question 9
radioButton17 = findViewById(R.id.radioButton17); //yes
radioButton18 = findViewById(R.id.radioButton18); //no
}
public void opendiagnosis() {
// for all pairs: one of each pair has to be checked
boolean shouldStartNextActivity = (radioButton.isChecked() || radioButton2.isChecked())
&& (radioButton3.isChecked() || radioButton4.isChecked()) && (radioButton5.isChecked() || radioButton6.isChecked())
&& (radioButton7.isChecked() || radioButton8.isChecked())&& (radioButton9.isChecked() || radioButton10.isChecked())
&& (radioButton11.isChecked() || radioButton12.isChecked())&& (radioButton13.isChecked() || radioButton14.isChecked())
&& (radioButton15.isChecked() || radioButton16.isChecked())&& (radioButton17.isChecked() || radioButton18.isChecked());
if (shouldStartNextActivity){
Intent intent = new Intent(this, answers.class);
startActivity(intent);
} else{
Toast.makeText(getBaseContext(), "Please answer all the questions for an accurate diagnosis", Toast.LENGTH_LONG).show();
}
}
public void diagnosispart() {
EditText text = (findViewById(R.id.textView16));
String value = text.getText().toString();
Intent i = new Intent(this, answers.class);
i.putExtra("Value1", "this is it");
startActivity(i);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("myOption1", radioButton.isChecked());
savedInstanceState.putBoolean("myOption2", radioButton2.isChecked());
savedInstanceState.putBoolean("myOption3", radioButton3.isChecked());
savedInstanceState.putBoolean("myOption4", radioButton4.isChecked());
savedInstanceState.putBoolean("myOption5", radioButton5.isChecked());
savedInstanceState.putBoolean("myOption6", radioButton6.isChecked());
savedInstanceState.putBoolean("myOption7", radioButton7.isChecked());
savedInstanceState.putBoolean("myOption8", radioButton8.isChecked());
savedInstanceState.putBoolean("myOption9", radioButton9.isChecked());
savedInstanceState.putBoolean("myOption10", radioButton10.isChecked());
savedInstanceState.putBoolean("myOption11", radioButton11.isChecked());
savedInstanceState.putBoolean("myOption12", radioButton12.isChecked());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
radioButton.setChecked(savedInstanceState.getBoolean("myOption1"));
radioButton2.setChecked(savedInstanceState.getBoolean("myOption2"));
radioButton3.setChecked(savedInstanceState.getBoolean("myOption3"));
radioButton4.setChecked(savedInstanceState.getBoolean("myOption4"));
radioButton5.setChecked(savedInstanceState.getBoolean("myOption5"));
radioButton6.setChecked(savedInstanceState.getBoolean("myOption6"));
radioButton7.setChecked(savedInstanceState.getBoolean("myOption7"));
radioButton8.setChecked(savedInstanceState.getBoolean("myOption8"));
radioButton9.setChecked(savedInstanceState.getBoolean("myOption9"));
radioButton10.setChecked(savedInstanceState.getBoolean("myOption10"));
radioButton11.setChecked(savedInstanceState.getBoolean("myOption11"));
radioButton12.setChecked(savedInstanceState.getBoolean("myOption12"));
}
}
然后将意图传递给答案活动,它的意思是在 textView16 中显示:
public class answers extends AppCompatActivity {
private Button button7;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_answers);
Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
String value1 = extras.getString("Value1");
if (value1 != null) {
TextView displayintentextra = findViewById(R.id.textView16);
displayintentextra.setText(value1);
}
button7 = findViewById(R.id.button7);
button7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reset();
}
});
}
public void reset() {
Intent intent = new Intent(this, Questions.class);
startActivity(intent);
}
}
这是logcat所说的:
2020-01-30 08:07:37.581 20275-20275/com.example.mhtapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mhtapplication, PID: 20275
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at com.example.mhtapplication.Questions.onlick(Questions.java:103)
edittext 视图所基于的 XML 文件:
<EditText
android:id="@+id/textView16"
android:layout_width="384dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="12dp"
android:text=""
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView13" />
解决方案
首先不需要为它添加额外的大括号
EditText text = (findViewById(R.id.textView16));
它可以写成
EditText text = findViewById(R.id.textView16);
还要确保您EditText
在 xml 布局中作为您的视图,或者也请共享 xml 部分
text
在从中获取文本之前,请确保您的视图中有文本
根据您更新的代码,请放在EditText text = (findViewById(R.id.textView16));
后面setContentView()
,然后重试。
推荐阅读
- qemu - QEmu `eject` 抱怨设备在那里时找不到
- java - 在junit5中对dropwizard进行单元测试时如何注入HttpSession和HttpServletRequest?
- telerik - 如何使用剑道网格更改组的顺序?
- filter - 如何在可变长度 Cypher 查询中按模式过滤
- c# - 防止恶意用户在注销后访问页面
- javascript - 引导 jQuery 和 JavaScript 冲突?
- python-3.x - 为什么我收到下面提到的错误?
- vba - Office 中的 Javascript
- gimp - python-fu gimp 获取项目列表
- node.js - MongoDB:如何从集合中的最新文档中获取时间戳和 ObjectID?