Codename One - добавить ограничение на дату PickerComponent - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно проверить, если пользователю не менее 13 лет. Проблема в том, что объект, передаваемый из PickerComponent его Validator, является строкой, а не датой (как я и ожидал). Эта строка отформатирована в соответствии с моей локалью (в симуляторе), поэтому для «9 мая 2003 года» я получаю строку «09/05/03» (я также удивлен, что вместо этого год обозначается только двумя цифрами) из четырех).

Итак ... Я попробовал следующий код, но он не работает (в моей локали). Мне нужен работающий валидатор для компонента Date Picker (который также не зависит от локали):

PickerComponent date = PickerComponent.createDate(new Date()).label("Data di nascita").errorMessage("Hai almeno 13 anni?");

Validator validator = new Validator();

validator.addConstraint(date, new Constraint() {
            @Override
            public boolean isValid(Object value) {
                boolean res = false;
                if (value instanceof String) {
                    String inputDate = (String) value;
                    Log.p("-----------------");
                    Log.p("Inserted birthday date: " + inputDate);
                    Log.p("-----------------");
                    try {
                        Calendar birthday = Calendar.getInstance();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/mm/yy");
                        birthday.setTime(simpleDateFormat.parse(inputDate));
                        Calendar nowLess13years = Calendar.getInstance();
                        nowLess13years.setTime(new Date());
                        nowLess13years.add(Calendar.YEAR, -13);
                        if (birthday.before(nowLess13years) || birthday.equals(nowLess13years)) {
                            res = true;
                        }
                    } catch (ParseException ex) {
                        Log.p("Cannot parse the date");
                    }
                }
                return res;
            }

            @Override
            public String getDefaultFailMessage() {
                return "You must be at least 13 years old";
            }
        });

1 Ответ

0 голосов
/ 10 мая 2018

Это была действительно глупая ошибка в коде сборщика:

    if(cmp instanceof Picker) {
        ((Picker)cmp).getValue();
    }

Вместо:

    if(cmp instanceof Picker) {
        return ((Picker)cmp).getValue();
    }

Будет исправлено завтра ...

...