Я знаю, что это может быть очень простое решение, но я не могу всю жизнь заставить эту часть кода работать для моей проверки симптомов. Все остальное работает безупречно, но приложение полностью вылетает при методе диагностики.
Вот часть файла 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)
XML файл, на котором основано представление edittext :
<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" />