try - catch без метода

подскажите пожалуйста

есть try которая принимает значения из Edit и если значения есть, catch не должен выполняться. То есть берутся значения из полей потом идет перемножение, потом преобразование дробного с текст и вывести в Edit другой. Но что то мне кажется что я неправильно делаю ибо вроде бы нельзя преобразовать дробное число в текст, а может я ошибаюсь.

У меня есть 4 EditText d 3 из них записываются значения дробные, в а 4 должен выводиться результат умножения без применения кнопки. в итоге при запуске в 4 поле просто написано 0.0 а при попытке ввода значения в 3 других поля ничего не происходит просто вставляются числа и все, перемножения не происходит

Можно ли сделать так что бы при вводе в 3 Edit автоматически результат переносился в 4 Edit не используя кнопку, что бы не захламлять экран приложения еще кнопкой.

package com.example.magictrans;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Arrays;
import java.util.List;

public class fullcalc extends AppCompatActivity {
        EditText doppoint1, doppoint3, doppoint2, point4;
        double a, b, c, d;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fullcalc);
            doppoint1 = (EditText) findViewById(R.id.doppoint1);
            doppoint2 = (EditText) findViewById(R.id.doppoint2);
            doppoint3 = (EditText) findViewById(R.id.doppoint3);
            point4 = (EditText) findViewById(R.id.point4);
            
            try {
                a = Double.parseDouble(doppoint1.getText().toString());
                b = Double.parseDouble(doppoint2.getText().toString());
                c = Double.parseDouble(doppoint3.getText().toString());

            } catch (NumberFormatException e) {
                a = 0;
                b = 0;
                c = 0;
            }
            d=a*b*c;
            String result = Double.toString(d);
            point4.setText(result);
        }
}

Ответы (1 шт):

Автор решения: woesss

Без метода никак: метод onCreate выполняется один раз при запуске активности, а поля заполняются когда-нибудь потом и не в один момент, поэтому здесь нужен слушатель для полей ввода - он реагирует на любое изменение в EditText и выполняет наш код.

public class fullcalc extends AppCompatActivity {
        TextWatcher textWatcher = new TextWatcher() {

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

            @Override
            public void afterTextChanged(Editable s) {
                try {
                    a = Double.parseDouble(doppoint1.getText().toString());
                    b = Double.parseDouble(doppoint2.getText().toString());
                    c = Double.parseDouble(doppoint3.getText().toString());
                } catch (NumberFormatException e) {
                    a = 0;
                    b = 0;
                    c = 0;
                }
                d=a*b*c;
                String result = Double.toString(d);
                point4.setText(result);
            }

        }

        EditText doppoint1, doppoint3, doppoint2, point4;
        double a, b, c, d;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fullcalc);
            doppoint1 = (EditText) findViewById(R.id.doppoint1);
            doppoint2 = (EditText) findViewById(R.id.doppoint2);
            doppoint3 = (EditText) findViewById(R.id.doppoint3);
            point4 = (EditText) findViewById(R.id.point4);
            doppoint1.addTextChangedListener(textWatcher);
            doppoint2.addTextChangedListener(textWatcher);
            doppoint3.addTextChangedListener(textWatcher);
        }
}
→ Ссылка