вызвать ошибку EditText () пустая ссылка на объект - PullRequest
0 голосов
/ 30 января 2020

Я знаю, что это может быть очень простое решение, но я не могу всю жизнь заставить эту часть кода работать для моей проверки симптомов. Все остальное работает безупречно, но приложение полностью вылетает при методе диагностики.

Вот часть файла 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" />

1 Ответ

1 голос
/ 30 января 2020

Во-первых, не нужно добавлять дополнительные скобки для EditText text = (findViewById(R.id.textView16));
Это может быть записано как

EditText text = findViewById(R.id.textView16);

Также убедитесь, что у вас есть EditText в качестве вида в xml Layout или, пожалуйста, поделитесь xml часть также

Убедитесь, что у вас есть текст внутри вашего text вида, прежде чем получать текст из него

В соответствии с вашим обновленным кодом, пожалуйста, поставьте EditText text = (findViewById(R.id.textView16)); после setContentView() и затем повторите попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...