Как сделать так, чтобы тост всплывал, если поле EditText пусто или введенное значение равно 0? - PullRequest
0 голосов
/ 09 июля 2020

Прежде всего, я новичок в Android Studio. В настоящее время я пытаюсь создать приложение-калькулятор ИМТ, в котором пользователь должен ввести свой вес и рост и выбрать единицу измерения, используемую для обоих. Сообщение Toast (R.string.toastError) должно появиться при нажатии кнопки, если: (1-2) поля EditText для веса и роста пусты и (3) если значение HeightInput меньше или равно нулю; иначе расчет должен продолжаться.

Вся математическая часть работала нормально, когда я ее тестировал, но когда я оставил поля пустыми, приложение просто аварийно завершило работу. Тост появляется, когда HeightInput = 0, но не тогда, когда поле EditText для Weight остается пустым в то же время. Думаю, именно так я написал оператор if, из-за которого у меня возникла проблема.

 // if edit text is empty
            if (editTextWeightInput.getText().toString().length() == 0 || editTextHeightInput.getText().toString().length() == 0 || HeightInput <= 0) {
                Toast.makeText(getApplicationContext(), R.string.toastError, Toast.LENGTH_SHORT).show();
            } else {
                    double finalheight = Math.pow((HeightInput * constantHeight), 2.00);
                    double BodyMassIndex = (WeightInput * constantWeight) / finalheight;
                    DecimalFormat BodyMassIndexFormat = new DecimalFormat("##.##");
                    TextView textViewResult = (TextView) findViewById(R.id.textViewBmiResult);
                    textViewResult.setText(BodyMassIndexFormat.format(BodyMassIndex));
                }

Вот весь код для справки:

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // weight units spinner
    final Spinner spinWeightUnit = (Spinner) findViewById(R.id.spinnerWeightUnit);
    spinWeightUnit.setOnItemSelectedListener(this);
    ArrayAdapter <CharSequence> WeightList = ArrayAdapter.createFromResource(this, R.array.WeightUnits, android.R.layout.simple_spinner_item);
    WeightList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinWeightUnit.setAdapter(WeightList);
    
    // height units spinner
    final Spinner spinHeightUnit = (Spinner) findViewById(R.id.spinnerHeightUnit);
    spinHeightUnit.setOnItemSelectedListener(this);
    ArrayAdapter <CharSequence> HeightList = ArrayAdapter.createFromResource(this, R.array.HeightUnits, android.R.layout.simple_spinner_item);
    HeightList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinHeightUnit.setAdapter(HeightList);
    
    // calculate button
    Button buttonCalculate = (Button) findViewById(R.id.buttonCalculate);
    buttonCalculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            
            // declaration
            EditText editTextWeightInput = (EditText) findViewById(R.id.editTextWeightInput);
            EditText editTextHeightInput = (EditText) findViewById(R.id.editTextHeightInput);
            double WeightInput = Double.valueOf(editTextWeightInput.getText().toString());
            double HeightInput = Double.valueOf(editTextHeightInput.getText().toString());
            String finalWeightUnit = String.valueOf(spinWeightUnit.getSelectedItem());
            String finalHeightUnit = String.valueOf(spinHeightUnit.getSelectedItem());
            double constantWeight;
            double constantHeight;
            
            // weight conversion constant
            if (finalWeightUnit.equals("kilograms")) {
                constantWeight = 1.00;
            } else {
                constantWeight = 1 / 2.204623;
            }
            
            // height conversion constant
            switch (finalHeightUnit) {
                case "inches":
                    constantHeight = 0.0254;
                    break;
                case "centimeters":
                    constantHeight = 0.01;
                    break;
                case "feet":
                    constantHeight = 1 / 3.2808;
                    break;
                default:
                    constantHeight = 1.00;
                    break;
            }
            
            // if edit text is empty
            if (editTextWeightInput.getText().toString().length() == 0 || editTextHeightInput.getText().toString().length() == 0 || HeightInput <= 0) {
                Toast.makeText(getApplicationContext(), R.string.toastError, Toast.LENGTH_SHORT).show();
            } else {
                    double finalheight = Math.pow((HeightInput * constantHeight), 2.00);
                    double BodyMassIndex = (WeightInput * constantWeight) / finalheight;
                    DecimalFormat BodyMassIndexFormat = new DecimalFormat("##.##");
                    TextView textViewResult = (TextView) findViewById(R.id.textViewBmiResult);
                    textViewResult.setText(BodyMassIndexFormat.format(BodyMassIndex));
                }
            }
        });
    }

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

}



  @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}

Буду признателен за любую помощь! Спасибо!

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Попробуйте ниже в операторе if

if (editTextWeightInput.getText().toString().trim().isEmpty() || editTextHeightInput.getText().toString().trim().isEmpty() || HeightInput <= 0)
0 голосов
/ 09 июля 2020

Вам также необходимо подтвердить свой код декларации.

     // declaration
 EditText editTextWeightInput = (EditText) findViewById(R.id.editTextWeightInput);
        EditText editTextHeightInput = (EditText) findViewById(R.id.editTextHeightInput);

      if(TextUtil.isEmpty(editTextWeightInput.getText().toString())||TextUtil.isEmpty(editTextHeightInput.getText().toString())){
            Toast.makeText(getApplicationContext(), R.string.toastError, 
                Toast.LENGTH_SHORT).show();
    
       }else{

            
        double WeightInput = Double.valueOf(editTextWeightInput.getText().toString());
        double HeightInput = Double.valueOf(editTextHeightInput.getText().toString());
        String finalWeightUnit = String.valueOf(spinWeightUnit.getSelectedItem());
        String finalHeightUnit = String.valueOf(spinHeightUnit.getSelectedItem());
        double constantWeight;
        double constantHeight;

}

0 голосов
/ 09 июля 2020

Когда вы оставляете EditText Empty, функция getString () возвращает нулевое значение. Сначала вам нужно проверить значение null в условии if.

if (editTextWeightInput.getText() == null || editTextWeightInput.getText().toString().length() == 0 || HeightInput <= 0) 
...