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 шт):
Без метода никак: метод 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);
}
}