Задать вопрос
@Chesterfield25

Как сделать правильное сравнение?

В приложение есть 2 EditText мне нужно выполнить математическое действие 1EditText * 2EditText и то что получится умножить на 2 и присвоить тексту!
Нашел реализацию того что мне нужно но только когда из какого либо поля EditText убрать значение то приложение закрывается из за того что поле пустое, как это можно исправить?

binding.inputPrice.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                int a = Integer.parseInt(binding.inputQuantity.getText().toString());
                int b = Integer.parseInt(binding.inputPrice.getText().toString());

                int res = (a * b) * 2;
                binding.totalPrice.setText(String.valueOf(res));

            }

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

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

        binding.inputQuantity.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                int a = Integer.parseInt(binding.inputQuantity.getText().toString());
                int b = Integer.parseInt(binding.inputPrice.getText().toString());

                int res = (a * b) * 2;
                binding.totalPrice.setText(String.valueOf(res));
            }

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

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
        });
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Chesterfield25 Автор вопроса
Вот что исправило мою проблему

private void gettingTotalPrice() {

        binding.inputPrice.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                try {
                    int a = Integer.parseInt(binding.inputQuantity.getText().toString());
                    int b = Integer.parseInt(binding.inputPrice.getText().toString());

                    int res = (a * b) * 2;
                    binding.totalPrice.setText(String.valueOf(res));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }

            }

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

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

        binding.inputQuantity.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                try {
                    int a = Integer.parseInt(binding.inputQuantity.getText().toString());
                    int b = Integer.parseInt(binding.inputPrice.getText().toString());

                    int res = (a * b) * 2;
                    binding.totalPrice.setText(String.valueOf(res));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
            }

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

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
        });
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Jacen11
@Jacen11
ты уж прости, но твои вопросы очень тупые. Ты просто не тянешь программирование в принципе. Ты не понимаешь типы данных, эксепшены, отладку и тд. Ты просто не знаешь алфавит, а лезешь писать поэму. Это элементарные вещи, которые изучаются в самом начале. Хочешь изучить программирование начни с вещей проще, если задача, то найми фрилансера.

int b = Integer.parseInt(binding.inputPrice.getText().toString());
уже просто из описания я понимаю что дело в этой строке и студия вам точно говорит об этом. И даже ошибку говорит. Пустая строка не может быть цифрой! Можно сделать int на Integer и потом проверять на налл, можно в трай кетч обернуть. Но ты ведь не поймешь же о чем я?

ЗЫ блин, да ты же даже не понимаешь что binding.inputQuantity.getText() и Editable s это одно и тоже
Ответ написан
@WaterSmith
Android-разработчик. Java, Kotlin
Когда у тебя EditText содержит пустую строку, получается что ты делаешь
Integer.parseInt("");
В результате чего получается null
Поскольку null нельзя присвоить примитивному типу int то при попытке это сделать у тебя возникает NullPointException - для пользователя это выглядит будто программа просто сама закрылась.
У тебя два выхода:
1. Отловить этот NullPointException с помощью try catch
2. Присваивать не примитивному типу int, а объектному Integer, а затем после присвоения проверит, результат на не равенство null
Не зависимо от способа, либо в catch либо в else переприсваешь значение перемнной на 0, ну или выдешь ошибку, в зависимости от того, чего там требует логика твоей программы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы