Проблема с проверкой того, что все EditTexts пусты - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 5 EditTexts, когда я нажимаю на кнопку, я хочу убедиться, что все они не пусты, чтобы взять данные из них и поместить их в базу данных, и начать другое действие.Если все они пусты, появится сообщение «Вам нужно заполнить все».Однако, когда все EditTexts пусты и я нажимаю кнопку, приложение вылетает.Как я могу решить эту проблему и что я могу сделать, чтобы получить желаемый результат?(Код еще не закончен.)

public class Main2Activity extends AppCompatActivity {

DatabaseHelper myDB;
Button btnAdd;
EditText editText1,editText2,editText3,editText4,editText5;


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

    editText1 = (EditText) findViewById(R.id.name);
    editText2 = (EditText) findViewById(R.id.year);
    editText3 = (EditText) findViewById(R.id.month);
    editText4 = (EditText) findViewById(R.id.day);
    editText5 = (EditText) findViewById(R.id.price);



    btnAdd = (Button) findViewById(R.id.btn_add);
    myDB = new DatabaseHelper(this);




    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name1 = editText1.getText().toString();
            String year2 = editText2.getText().toString();
            int year1 = Integer.parseInt(year2);
            String month2 = editText3.getText().toString();
            int month1 = Integer.parseInt(month2);
            String day2 = editText4.getText().toString();
            int day1 = Integer.parseInt(day2);
            String price2 = editText5.getText().toString();
            int price1 = Integer.parseInt(price2);


            if (name1.length() != 0 && year2.length() != 0 && month2.length() != 0 && day2.length() != 0 && price2.length() != 0) {

                AddData(name1, year1, month1, day1, price1);

                editText1.setText("");
                editText2.setText("");
                editText3.setText("");
                editText4.setText("");
                editText5.setText("");

                Intent intent = new Intent(Main2Activity.this, MainActivity.class);
                startActivity(intent);

            } else {

                Toast.makeText(Main2Activity.this, "You need to fill everything", Toast.LENGTH_LONG).show();
            }


        }
    });
}




public void AddData(String name1, int year1, int month1, int day1, int price1) {

    boolean insertData = myDB.addData(name1,year1,month1,day1,price1);

    if(insertData==true){
        Toast.makeText(this, "Data Successfully Inserted!", Toast.LENGTH_LONG).show();
    }else{
        Toast.makeText(this, "Something went wrong :(.", Toast.LENGTH_LONG).show();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Здесь происходит сбой:

int year1 = Integer.parseInt(year2);

Когда EditText пусто, вы передаете пустую строку в Integer.parseInt, что приводит к NumberFormatException. Чтобы избежать этого, переместите код синтаксического анализа в блок проверки.

@Override
public void onClick(View v) {
    String name1 = editText1.getText().toString();
    String year2 = editText2.getText().toString();
    String month2 = editText3.getText().toString();
    String day2 = editText4.getText().toString();
    String price2 = editText5.getText().toString();

    if (name1.length() != 0 && year2.length() != 0 && month2.length() != 0 && day2.length() != 0 && price2.length() != 0) {

        // Move parsing code here
        int year1 = Integer.parseInt(year2);
        int month1 = Integer.parseInt(month2);
        int day1 = Integer.parseInt(day2);
        int price1 = Integer.parseInt(price2);
        AddData(name1, year1, month1, day1, price1);

        editText1.setText("");
        editText2.setText("");
        editText3.setText("");
        editText4.setText("");
        editText5.setText("");

        Intent intent = new Intent(Main2Activity.this, MainActivity.class);
        startActivity(intent);

    } else {

        Toast.makeText(Main2Activity.this, "You need to fill everything", Toast.LENGTH_LONG).show();
    }
}
0 голосов
/ 07 июня 2019

Вы можете разрешить пользователю нажимать кнопку только после ввода текста во все ваши тексты редактирования, например:

if (all editTexts got text inside) {
  //not all editTexts got text inside them, user cant press the button
  button.setClickable(false);  
}
else{
  //all editTexts got text inside them, user can now press the button
  button.setClickable(true);  
}

Примечание - «все тексты редактирования получили текст внутри», который явнутри отчета if вы можете указать, каким образом вы хотели бы проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...