【问题标题】:Codename One - addConstraint to PickerComponent date代号一 - 将约束添加到 PickerComponent 日期
【发布时间】:2018-05-10 12:21:18
【问题描述】:

我需要检查用户是否至少 13 岁。 问题是从 PickerComponent 给它的 Validator 的对象是一个字符串,而不是一个日期(如我所料)。 该字符串是根据我的语言环境(在模拟器中)格式化的,所以对于“2003 年 5 月 9 日”,我得到字符串“09/05/03”(我也很惊讶年份只用两位数字表示四)。

所以...我尝试了以下代码,但它不起作用(在我的语言环境中)。我需要一个适用于 Date PickerComponent 的验证器(它也独立于语言环境):

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";
            }
        });

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    这是选择器代码中的一个非常愚蠢的错误:

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

    代替:

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

    明天会修复...

    【讨论】:

    • 我不确定我是否理解正确:在此修复之后,我将从 Picker 获得一个 Date 对象(如我所料),而不是一个本地化的格式化字符串?
    • 是的。验证器代码中有一个愚蠢的错误,缺少 return 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2013-01-22
    • 2021-03-27
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多