ошибка при нажатии любой кнопки «android.text.Редактируемый android.widget.EditText.getText ()» на нулевую ссылку на объект

#java

#java

Вопрос:

Приложение в виртуальной машине Android внезапно останавливается. Попытка вызвать виртуальный метод «android.text.Editable android.widget.EditText.getText ()» на нулевую ссылку на объект

Помогите, пожалуйста. ошибка Android studio ошибка
:

2021-01-08 00:58:49.288 9583-9583/com.example.simplecalculator E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.simplecalculator, PID: 9583 java.lang.Исключение IllegalStateException: не удалось выполнить метод для Android: onClick at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402 ) в android.view.View.performClick(View.java:7125) на com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967) на android.view.View.performClickInternal(View.java:7102) на android.view.View.access$ 3500 (View.java: 801) на android.view.View$performClick.run(View.java: 27336) наandroid.os.Handler.handleCallback(Handler.java: 883) в android.os.Handler.DispatchMessage (Handler.java:100) в android.os.Looper.loop (Looper.java: 214) в android.app.ActivityThread.main(ActivityThread.java:7356) вjava.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Вызвано: java.lang.reflect.Исключение InvocationTargetException в java.lang.reflect.Метод.invoke (собственный метод) в androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) на android.view.View.performClick(View.java:7125) на com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967) на android.view.View.performClickInternal(View.java:7102) на android.view.View.access$ 3500 (View.java: 801) на android.view.View$performClick.run(View.java: 27336) наandroid.os.Handler.handleCallback(Handler.java: 883) в android.os.Handler.DispatchMessage (Handler.java:100) в android.os.Looper.loop (Looper.java: 214) в android.app.ActivityThread.main(ActivityThread.java:7356) вjava.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930), вызванный: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘android.text.Editable android.widget.EditText.getText ()» на нулевую ссылку на объект в com.example.simplecalculator.MainActivity.sum(MainActivity.java:33) в java.lang.reflect.Метод.invoke (собственный метод) в androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) на android.view.View.performClick(View.java:7125) на com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967) на android.view.View.performClickInternal(View.java:7102) на android.view.View.access$ 3500 (View.java: 801) на android.view.View$performClick.run(View.java: 27336) наandroid.os.Handler.handleCallback(Handler.java: 883) в android.os.Handler.DispatchMessage (Handler.java:100) в android.os.Looper.loop (Looper.java: 214) в android.app.ActivityThread.main(ActivityThread.java:7356) вjava.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 2021-01-08 00:58:49.336 9583-9583/ com.example.простой вычислительЯ / процесс: отправка сигнала. PID: 9583 SIG: 9

добавляю также мой код.

 public class MainActivity extends AppCompatActivity {

    EditText num1Text;
    EditText num2Text;
    TextView ResText;
    int num1;
    int num2;
    int resu<

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText num1Text =(EditText) findViewById(R.id.num1Text);
        EditText num2Text =(EditText) findViewById(R.id.num2Text);
        TextView ResText =(TextView) findViewById(R.id.ResText);

    }


    public void sum(View view) {

        if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
            ResText.setText("Enter number");
        }
        else{
            num1 = Integer.parseInt(num1Text.getText().toString());
            num2 = Integer.parseInt(num2Text.getText().toString());
            result = num1   num2;
            ResText.setText("Result = "   result);
        }

    }

    public void deduct(View view) {
        if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
            ResText.setText("Enter number");
        }
        else {
            num1 = Integer.parseInt(num1Text.getText().toString());
            num2 = Integer.parseInt(num2Text.getText().toString());
            result = (num1 - num2);
            ResText.setText("Result = "   result);
        }

    }

    public void multiply(View view) {
        if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
            ResText.setText("Enter number");
        }
        else {
            num1 = Integer.parseInt(num1Text.getText().toString());
            num2 = Integer.parseInt(num2Text.getText().toString());
            result = num1 * num2;
            ResText.setText("Result = "   result);
        }

    }

    public void divide(View view) {
        if(num1Text.getText().toString().matches("") || num2Text.getText().toString().matches("")){
            ResText.setText("Enter number");
        }
        else {
            num1 = Integer.parseInt(num1Text.getText().toString());
            num2 = Integer.parseInt(num2Text.getText().toString());
            result = num1 / num2;
            ResText.setText("Result = "   result);
        }

    }

}
 

Комментарии:

1. Вы пробовали удалять имя объекта внутри onCreate() при инициализации EditText ? Похоже, что вы определяете эти переменные дважды.

Ответ №1:

Вы неправильно инициализируете поля EditText и. TextView

На самом деле ваш код использует findViewById для получения значений, а затем присваивает их локальным переменным, а не соответствующим полям.

Изменить

     EditText num1Text = (EditText) findViewById(R.id.num1Text);
    EditText num2Text = (EditText) findViewById(R.id.num2Text);
    TextView ResText = (TextView) findViewById(R.id.ResText);
 

Для

     num1Text = (EditText) findViewById(R.id.num1Text);
    num2Text = (EditText) findViewById(R.id.num2Text);
    ResText = (TextView) findViewById(R.id.ResText);
 

Стоит отметить, что есть и другие ошибки. Например, вы не имеете дело со случаем, когда пользователь вводит нечисловое значение в одно из текстовых полей. Это приведет к исключению при попытке превратить текст в число.