你还在为EditText内容判断而烦恼?

http://www.jianshu.com/u/5aad180d1ea8

文章目录

  • 基本使用方法

  • 基本的注解

    • @Order:

    • (message = ""):

    • sequence:

    • @Optional:

    • validateTill 和 validateBefore

    • @AssertTrue 和 @AssertFalse

    • Custom Annotation

  • 补充

  • 大家好,又到了新的一期的项目需求讨论。我想大家在开发APP,肯定会有很多需要填入EditText内容的界面,比如注册界面,修改密码界面。这些界面都会有很多个相应的EditText。同时每个EditText需要填写的内容不同,所以就造成我们对于每个EditText进行相应的判断。

     

    比如下面的界面:

    可能我们需要输入“用户名”、“地址”、“邮箱”、“电话”。然后下面可能就有一个“注册”的按钮,当我们按下“注册”按钮的时候。我们可能平时都是这么做的:

     

  • 获取了四个EditText的对象

  • 获取他们的内容,从上往下,一个个判断他是不是为空,如果为空,我们就提示用户漏填了某个内容:

  • 当每个都填了内容后,你可能还要相应的不同的EditText还有相应的规则,比如我们上面已经判断了用户名不为空了。然后我们的APP有规定,用户名的长度不能小于5同时不能大于10,然后你又要写:

  • 然后你还要对相应的EditText去一个个判断邮箱规则,电话规则,如果还要“密码”的EditText,一般同事还有一个“确认密码”的EditText,这时候你不仅要第一个EditText符合密码规则,然后还要判断二个EditText的内容是不是相等。反正是麻烦至极,而且代码基本都是很多地方都是重复,让阅读也变得很差。

  •  

     所以程序员本着对于这些代码的懒惰原则。我就去寻找相关的优秀的工具,这不,本文的主角出场了:

     

    **android-saripaar(https://github.com/ragunathjawahar/android-saripaar)
    **

     

    这里我们分别对于本文主角的使用功能来进行介绍:

     

    0

    基本使用方法:

    比如我们上面讲到的用户名不能为空,我们看下用saripaar是怎么来使用

     

  • 在我们定义的EditText的引用上方,添加相应功能的注解即可

  • 创建Validator对象,并且设置EditText中的内容规则判断后的回调事件:

  • 在某种条件下(比如按下注册按钮)调用验证方法:

  • 基本用法就是上面那样,可能大家会说,老司机你就这样??这个功能也太少了吧。别急,容许老司机一步步来介绍相关详细内容。

     

    1

    基本的注解:

    比如有一些:

    @NotEmpty :非空
    @Length: 长度
    @Email: 邮箱
    @Password:密码(默认是6位)
    @ConfirmPassword:确认密码
    @Checked:CheckBox是否被选中
    @Length:长度判断
    IpAddress:ip地址判断

     

    等,我就不列举了,直接看图吧

     

  • @Order:

  • 我们一般来说界面上会有好几个EditText,比如name,email,address三个输入框,我们会对三个输入框都设置相关的规则,这时候每个app中对于这些输入框的判断的顺序有所要求,比如先是判断name,然后依次往下判断,但有些可能先判断address等。
    所以@Order就是用来让我们验证好几个EditText时来进行排序的。

    这时候大家可能就会问了。你这里设置了@Order,那顺序体现在哪里呢?就在我们上面设置过的Listener中:

    我们可以看到,这个失败的方法里面的参数是List<ValidationError> errors
    我们可以看下ValidationError的源码里面有这么几个方法:

    我们一眼就会发现getView这个方法就是我们所需要的,没错,如果我们有好几个EditText都不符合规则,在List```<ValidationError>中就会按照我们写的@Order``的顺序来进行排序。

     

    比如我们想让EditText不符合规则的时候出现:

     

    我们只需要:

    也许有人会说。我希望name错了的时候就提示name,后面的就不管了。报第一个不符合规则的错误,然后有人会说errors.get(0).getView()获取,当然这样是可以的,但是saripaar已经帮我考虑到了:

     

  • (message = ""):

  • 有小伙伴会说,你上面提示的内容的都是不符合规则,我们想要不同的EditText不符合规则后提示不同的内容,还记得我们上面ValidationError有个方法getCollatedErrorMessage(context),没错,我们可以给每个EditText设置不同的message,然后在验证失败后,显示相应的message即可:

     

  • sequence:

  • 我们有时候对于一个EditText会有多种要求,比如不仅不能为空,而且同时要符合邮箱的标准,这时候我们对于验证也希望有验证顺序,比如先判断是否为空,如果为空,直接就提示错误了。如果不为空再判断是不是符合邮箱的规则。

    这时候你会发现这个EditText就会按照你所规定的规则顺序来判断。
    但这里注意了,上面提过我们获取message是用

    因为上面我们一个EditText只添加了一个规则判断,所以无所谓,比如我这里添加了二个,我们再看的时候会变成怎么样?


    没错,虽然判断规则的顺序的确是按照我们写的那样,但是,你发现了,error.getCollatedErrorMessage(context);方法获取到的message的内容是全部不符合规则的message的集合。但我们想要的是非空的时候先提示不能为空,然后在不为空的条件下,不是邮箱格式,再提示邮箱不符合邮箱格式。

    还记不记得我们已经介绍了上面ValidationError的二个方法,还有一个方法getFailedRules()没介绍过,没错,我们可以用这个,从字面意思我们就可以理解,获取到失败的规则的集合,而且这个集合的顺序就是我们设置的sequence的顺序,我们这么写:

    我们获取第一个不符合的规则的Message即可。
    看效果:

     

  • @Optional:

  • 很多时候我们一些信息是非必填的,比如还是email,我们可以为空,但是如果你填了,那么一定就要符合邮箱的规则,这时候@Optional就起到作用了:

    你可以不填,这时候验证是通过的,但是如果你填了内容,就一定要符合email规则。使用起来什么方便。、

     

  • validateTill 和 validateBefore

  • 我们上面在最后起到验证功能是调用了

    同时它还提供了:

    从字面意思我们就知道,到某个View为止的规则检验,及某个View前的规则检验。

     

    validateTill:比如有a,b,c,d四个View,并且order的顺序相对应也是1,2,3,4,
    比如当前四个View都不符合规则,并且你调用了validateTill(c),那么我们的List<ValidationError> errors中就包含了a,b,c。如果你调用了validateBefore(c),则List<ValidationError> errors就包含了a,b,也就是比传入的View的Order小的会被包含。

     

    同时你在使用的时候会发现他们三个方法都有另外的重载方法,分别是:

    当那个Boolean值为true的时候,就是说我们可以把验证的过程放在后台的AsyncTask中去执行。

     

  • @AssertTrue 和 @AssertFalse

  • 我们有些输入框可能不是通用的规则,像邮箱啊,电话号码什么的,比如某个输入框的判断规则是"青蛙要fly好帅",当EditText的内容是这个的时候才能认为通过。这时候我们就要添加自己的规则。可以使用@AssertTrue来判断是否符合你定义的规则。

     

  • Custom Annotation

  • 当然我们还可以自己制定相关的注解,比如我现在自己写一个@CoolBoy,用来判断EditText是否符合我写的相关内容:

     

    CoolBoy.java

    CoolBoyRule.java

    最后一步:
    在Validator.java中添加我们刚声明好的注解:

    然后在我们的代码中使用:

     

    2

    补充

    我们在validator.java中还可以看到其他的申明等:

    哈哈,更多的demo大家也可以看:
    **android-saripaar(https://github.com/ragunathjawahar/android-saripaar)
    **
    里面有相关的testdemo的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值