Оптимизация Java-кода

204
23 марта 2017, 19:16

Необходимо оптимизировать ниже приведенный кусок кода. В данный момент есть несколько условий, при выполнении которых изменяется видимость TextEdit и ViewText. Всё выполняется нормально, но код выглядит ужасно..

private static int countErrors = 0;
    private void makeError()
    {
        countErrors++;
    }
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public void startSlider_click(View view) {
        countErrors = 0;
        EditText NameTextEdit = (EditText) findViewById(R.id.enterNameTextEdit);
        EditText UserFromTextEdit = (EditText) findViewById(R.id.enterCityEditText);
        EditText YearsTextEdit = (EditText) findViewById(R.id.enterYearsTextEdit);
        TextView NameText = (TextView) findViewById(R.id.enterNameText);
        TextView YearsText = (TextView) findViewById(R.id.enterOldText);
        TextView CityText = (TextView) findViewById(R.id.enterCity);
        CheckBox ruleBox = (CheckBox) findViewById(R.id.rulesBox);
        // Создать класс Validator
        // Возможно в аргументы передавать методы
        if (!NameTextEdit.getText().toString().equals("")) {
            NameTextEdit.setVisibility(View.GONE);
            NameText.setVisibility(View.GONE);
        } else makeError();
        if(!YearsTextEdit.getText().toString().equals("") && Integer.parseInt(YearsTextEdit.getText().toString())<150) {
            YearsTextEdit.setVisibility(View.GONE);
            YearsText.setVisibility(View.GONE);
        } else makeError();
        if(!UserFromTextEdit.getText().toString().equals("")) {
            UserFromTextEdit.setVisibility(View.GONE);
            CityText.setVisibility(View.GONE);
        } else makeError();
        if(ruleBox.isChecked())
        {
            ruleBox.setVisibility(View.GONE);
        } else makeError();
        if(countErrors==0){
            DBHelper dbHelper = DBHelper.newInstance(getApplicationContext());
            dbHelper.addAccount(NameTextEdit.getText().toString(), UserFromTextEdit.getText().toString(), Integer.parseInt(YearsTextEdit.getText().toString()));
            Intent intent = new Intent(this, CreatePlan.class);
            startActivity(intent);
            this.finish();
        }
    }
Answer 1

1) Заведите метод, который проверяет пустой ли EditText, типа:

private boolean isEmpty(TextView textView) {
   if(textView==null)
      return true;
   return (textView.getText().toString().length()==0)?true:false;
}

2) Парные кОнтролы, типа: YearsTextEdit и YearsText посадите в один Layout и устанавливайте флаг видимости сразу на общий Layout

3) Код парсинга строки в целое вынесите в отдельный метод - parseInt обладает отвратительным свойством выкидывать NumberFormatException - из-за чего вы можете получить неприятный Überraschung - надо в этом методе его обрабатывать и в случае ошибки выдавать дефолтное значение

4) Перейдите в конце концов на ButterKnife - код намного упростится

5) Почитайте про Java Naming Convention - такое ощущение что вы из лагеря шарпистов :)

6) И еще разберитесь со стилями скобок - или вы пишете открывающие скобки на одной строке с кодом или на новой строке - сразу видно, что у вас стиль хромает. Настройте в своем IDE стили форматирования кода.

READ ALSO
Как запустить одновременно два потока?

Как запустить одновременно два потока?

Как можно запустить одновременно два потока (не дожидаясь завершения одного из них) на Java?

293
Как вывести изображения в селекте?

Как вывести изображения в селекте?

Как сделать селект с миниатюрами (маленькими изображениями) вместо текста? Попробовал несколько плагинов типа jquery-form-styler или nice-select, ни в том,...

281
Затенение фона модального окна Bootstrap

Затенение фона модального окна Bootstrap

Есть стандартное модальное окно Bootstrap, нужно оставить возможность блокировки контента(data-backdrop="true") но убрать затенение с фона при сохранении...

511