亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

EasyValidate優雅地校驗提交數據完整性

2019-10-21 21:31:30
字體:
來源:轉載
供稿:網友

前言

在日常的Android開發中,我們在做登錄注冊等帶有提示性輸入校驗的時候。常常會寫樣子寫代碼:

EasyValidate,校驗,數據,完整性

然后你會發現每一次寫帶有提交信息頁面的時候都不得不去編寫這種千篇一律的代碼,那。。。。有沒有一種更加優雅得實現方式呢?So,我就是在這種情況下去編寫了一個項目,希望自己能把更多的注意力放在其他地方。(PS:比如偷懶)

一、如何優雅地實現代碼

說到用優雅得方式寫代碼,不得不提AnnotationProcessor,一個用于編譯時掃描和處理注解工具。它能很好得幫我們處理一些具有規律的,重復性的代碼勞動。So,作為一位矮肥圓,不得不承認,這東西很適合我。所以,我使用它結合Butternife寫了一個校驗提交前數據合法性的一個工具,用于即將重構的項目。

二、EasyValidate

使用方法,在Project下的build.gradle文件下面的allprojects中添加以下代碼片段

allprojects {  repositories {    google()    jcenter()    maven {url "https://dl.bintray.com/liweihua/maven/"}  }}

然后,在module的build.gradle中添加

implementation 'com.eiualee:easyvalidate:1.0.0'  annotationProcessor 'com.eiualee:easyvalidate-compiler:1.0.0'

三、用法

EasyValidate 提供了3種注解驗證,注:Plan字段等下再說

① ValidateNull (控件空判斷,當控件為空時,提示toast中填寫的內容)

@Retention(RetentionPolicy.CLASS)@Target(ElementType.FIELD)public @interface ValidateNull {  int id();//控件ID  String toast();//不合法時提示的內容  int[] plan() default {Plan.DEFAULT};//校驗計劃}

② ValidateCheck (判斷控件是否選中狀態, 當控件選中的狀態與validateState字段的值相同時會提示toast中的內容)

@Retention(RetentionPolicy.CLASS)@Target(ElementType.FIELD)public @interface ValidateCheck {  int id();//控件ID  String toast();//不合法時提示的內容  int[] plan() default {Plan.DEFAULT};//校驗計劃  boolean validateState() default false;//勾選的值不能與此相同,相同的話提示錯誤}

③ ValidateRegular(判斷控件內容是否符合正則表達式)

@Retention(RetentionPolicy.CLASS)@Target(ElementType.FIELD)public @interface ValidateRegular {  int id();//控件ID  String toast();//不合法時提示的內容  int[] plan() default {Plan.DEFAULT};//校驗計劃  String regular();}

當了解完上面3中注解后,我們就可以開始愉快的編程了。試著在控件上面這樣子使用,噢不,先得調用一個方法,使用與 Butternife 一致,畢竟是基于它寫出來的。以下為初始化時調用的代碼:

Activity:

IValidate IVALIDATE = EasyValidate.bind(this); IVALIDATE.setUnValidateListener(new IValidate.OnViewUnValidateListener() {    //失敗時的回調(viewid:驗證失敗View的id,toast:注解上的內容)    @Override    public void unValidate(int viewId, String toast) {           ToastUtils.showLongToast(toast);    } });

調用 EasyVlidate.bind(); 方法并返回一個 IValidate ,用 IValidate 實現

一個接口。這個接口主用于校驗失敗時回調,畢竟失敗時不一定都是 Toast 內容是吧!這樣子便于拓展。

Fragment

IValidate IVALIDATE = EasyValidate.bind(this, fragmentView);IVALIDATE.setUnValidateListener(new IValidate.OnViewUnValidateListener() {    //失敗時的回調(viewid:驗證失敗View的id,toast:注解上的內容)    @Override    public void unValidate(int viewId, String toast) {      ToastUtils.showLongToast(toast);    }});

與Activity的使用方法差不多,只是 EasyValidate.bind(this, fragmentView); 需要變化一下

釋放資源

IVALIDATE.unBind();

現在為注解使用事項

注解的使用

@ValidateNull(id = R.id.et_input1, toast = "輸入框1為空")EditText et_input1;@ValidateCheck(id = R.id.cb_check. toast = "請勾選xxxx注意事項后重新提交")CheckBox cb_check;//18位身份證號碼public static final String REGEX_ID_CARD = "^[1-9]//d{5}[1-9]//d{3}((0//d)|(1[0-2]))(([0|1|2]//d)|3[0-1])//d{3}([0-9Xx])$";@ValidateRegular(id = R.id.et_input3, toast = "輸入框3內容不符合18位身份證", regular = REGEX_ID_CARD, plan = Plan.B)EditText et_input3;

調用驗證的方法

if(!IVALIDATE.isValidatePass(Plan.DEFAULT)){   //Todo 驗證不通過   return;}

以上就是綁定界面、使用注解、開始驗證、解綁界面一整套的流程了,是不是很簡單。。。哦對了,在上面調用驗證方法是會有一個 Plan.DEFAULT 這個是干嘛的呢?請接著看。

Plan的使用(注解中默認的Plan為DEFAULT)

當我們在開發的時候。假設會有以下這么一種需求:

手機號碼 驗證碼 用戶名 密碼 
手機號碼 驗證碼

①當用戶輸入 手機號碼 時,只要 驗證碼 不為空就可以請求登錄接口了。

用戶名 密碼

②當用戶輸入 用戶名 時,只要 密碼 不為空就可以請求登錄接口了。

那我們要怎么做呢?這下子就會用到Plan這個字段了,請看代碼

@ValidateNull(id = R.id.et_phoneNo,toast = "手機號碼不能為空",plan = Plan.A)EditText et_phoneNo;@ValidateNull(id = R.id.et_checkNo,toast = "手機驗證碼不能為空",plan = Plan.A)EditText et_checkNo;@ValidateNull(id = R.id.et_userName,toast = "手機用戶名不能為空",plan = Plan.B)EditText et_userName;@ValidateNull(id = R.id.et_pw,toast = "手機密碼不能為空",plan = Plan.B)EditText et_pw;

在調用時分別傳入Plan即可

if(!IVALIDATE.isValidatePass(Plan.A)){   //Todo 驗證不通過   return;}
if(!IVALIDATE.isValidatePass(Plan.B)){   //Todo 驗證不通過   return;}

那當我需求中的判斷都需要用到這個控件去判斷可咋辦呢?

@ValidateNull(id = R.id.et_pw,toast = "手機密碼不能為空",plan = {Plan.A, Plan.B})EditText et_pw;

plan = {Plan.A, Plan.B} 就這么簡單,我既參加計劃A的校驗,也參加計劃B的校驗,這下可沒毛病了吧!

使用的注意事項

組件化 開發時要配合Butternife使用,我懶得去生成R2文件了,畢竟重復造輪子沒意義是吧。 結言

嗯。。。效果圖我就不發了。就這樣子吧。實現的原理大部分來源于Butternife,啊哈哈哈。以上,這是我的第一篇博客,算是對自己辛苦成果的獎勵吧。。。。拜!

GitHub地址: https://github.com/EiuaLee/EasyValidate

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
yw.139尤物在线精品视频| 久精品免费视频| 亚洲美女在线视频| 亚洲欧洲中文天堂| 国产精品扒开腿做| 亚洲欧美三级伦理| 中文字幕精品久久| 热99在线视频| 岛国视频午夜一区免费在线观看| 久久久精品视频在线观看| www.国产精品一二区| 欧美精品激情在线观看| 国产色综合天天综合网| 亚洲电影免费在线观看| 亚洲第一区中文字幕| 欧美日韩国产成人在线| 中文字幕欧美精品日韩中文字幕| 欧美日韩国产综合视频在线观看中文| 日韩欧美精品中文字幕| 欧美美女操人视频| 欧美高清在线播放| 午夜精品久久久久久99热| 国产视频在线观看一区二区| 日韩电影在线观看永久视频免费网站| 国产精品久久久久久久久久久久| 久久精品电影网站| 欧美孕妇孕交黑巨大网站| 久久天天躁狠狠躁夜夜躁2014| 国产精品视频区| 黄色成人在线播放| 97在线视频精品| 欧美综合激情网| 91人人爽人人爽人人精88v| 精品美女国产在线| 亚洲国产欧美一区二区三区同亚洲| 亚洲天堂网在线观看| 亚洲精品国产福利| 亚洲第一区在线观看| 97精品国产97久久久久久免费| 久久精品国产v日韩v亚洲| 欧美日韩亚洲网| 欧美大片网站在线观看| 国产成人一区二区三区| 午夜精品久久17c| 精品国产一区二区三区久久狼黑人| 亚洲欧美日韩精品久久奇米色影视| 亚洲一区二区三区在线视频| 欧美性猛交xxxx免费看久久久| 不卡在线观看电视剧完整版| 日韩免费观看在线观看| 久久久999国产| 欧美专区国产专区| 亚洲大胆人体av| 91久久国产婷婷一区二区| 国产精品海角社区在线观看| 成人免费看黄网站| 亚洲自拍另类欧美丝袜| 国产精品成人久久久久| 久久精品免费电影| 国产精品一区电影| 欧美日韩一区二区在线播放| 亚洲加勒比久久88色综合| 91国产视频在线播放| 亚洲二区在线播放视频| 久久久久久久久中文字幕| 亚洲欧美一区二区精品久久久| 亚洲xxxx在线| 久久视频在线观看免费| 精品一区二区三区四区| 91亚洲午夜在线| 亚洲专区在线视频| 亚洲激情视频在线观看| 亚洲最大福利视频| 69视频在线播放| 国产成人综合av| 在线观看日韩www视频免费| 国产成人精品视频在线| 91九色蝌蚪国产| 国产精品户外野外| 日韩在线精品一区| 亚洲女同性videos| 成人福利网站在线观看11| 国产精品一久久香蕉国产线看观看| 欧美激情一级精品国产| 久久久久久伊人| 2019中文字幕在线免费观看| 日韩大片在线观看视频| 国产精品永久在线| 亚洲成人黄色在线| 国产精品久久久久91| 国产精品视频资源| 久久精品国产亚洲精品| 最近免费中文字幕视频2019| 亚洲丁香婷深爱综合| 91国产美女在线观看| 国模叶桐国产精品一区| 黄网动漫久久久| 亚洲国产欧美一区二区三区久久| 久久综合久久88| 亚洲图中文字幕| 日韩欧美精品在线观看| 欧美成人精品一区二区三区| 国产精品久久久久久影视| 91日本在线观看| 日韩中文字幕在线视频播放| 91精品一区二区| 久久久亚洲网站| 欧美性xxxxxx| 国产精品午夜国产小视频| 欧美精品电影免费在线观看| 日韩激情视频在线| 人人澡人人澡人人看欧美| 一本大道香蕉久在线播放29| 91在线观看免费高清完整版在线观看| 国产精品99久久99久久久二8| 1769国内精品视频在线播放| 国产精品吴梦梦| 亚洲美女黄色片| 欧美在线一级视频| 亚洲精品久久久久久久久久久久久| 久久久久久久久久亚洲| 国产ts人妖一区二区三区| 国产日韩在线亚洲字幕中文| 中文字幕日韩欧美| 欧美成人午夜激情在线| 欧美另类高清videos| 国产精品久久久久久久av电影| 91香蕉电影院| 欧美午夜精品久久久久久人妖| 国产亚洲精品久久久久久777| 欧美在线欧美在线| 精品成人久久av| 亚洲乱码国产乱码精品精天堂| 97视频国产在线| 亚洲女人被黑人巨大进入| 欧美日韩在线看| 国产精品免费小视频| 欧美国产日韩xxxxx| 黑人巨大精品欧美一区免费视频| 中文字幕亚洲欧美在线| 欧美视频免费在线| 欧美视频在线观看 亚洲欧| 国产精品久久久久久av福利软件| 午夜精品蜜臀一区二区三区免费| 伊人久久综合97精品| 国产精品高潮呻吟久久av无限| 国产成人avxxxxx在线看| 91大神在线播放精品| 国产精品视频免费在线观看| 人人爽久久涩噜噜噜网站| 不卡av电影在线观看| 91国语精品自产拍在线观看性色| 日韩高清不卡av| www.欧美三级电影.com| 欧美激情xxxx| 日韩精品视频三区| 国产日韩欧美在线| 日韩电影免费观看中文字幕| 欧美日韩国产在线| 日韩av电影院| 国产主播喷水一区二区| 欧美极品xxxx| 国内精品模特av私拍在线观看| 91国产美女视频|