android-validator
基于AspectJ,注解,反射开发的Android方法、参数校验库,支持自定义规则校验,可以自己写各种玩法
可以方便的在方法调用时进行参数,变量的合法性校验。
Github 地址
目前支持的方法
在某些方法调用时检查参数的合法性并进行提示或其他操作
目前提供的注解有(支持自定义,持续修改中):
注解 | 说明 | 支持类型 |
---|---|---|
NotBlank | 不可为空 | String,Collection,以及有getText()/size()方法的任意类型 |
NotNull | 不可为Null | 任意类型 |
Pattern(regex) | 是否是指定的正则表达式 | String,以及有getText()方法的任意类型 |
Max(max) | 是否<=max | int |
Min(min) | 是否>=min | int |
Size(min,max) | 长度是否在min-max之间 | String,Collection,以及有getText()/size()方法的任意类型 |
Mobile | 是否是一个手机号码 | String,以及有getText()方法的任意类型 |
是否是一个邮箱 | String,以及有getText()方法的任意类型 |
Gradle 集成
1. add dependencies in module build.gradle
dependencies {
...
compile 'com.validator:validator-core:1.0.0@aar'
}
2. add AspecJ dependenceies in the end of module build.gradle
Android Application Module
apply from: 'https://raw.githubusercontent.com/aos3618/android-validator/master/appconfig.gradle'
Android Library Module
apply from: 'https://raw.githubusercontent.com/aos3618/android-validator/master/libconfig.gradle'
3. sync the project
初始化
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Validator.init(
ValidatorConfig
.newInstance()
.setApplication(this)
.setWarningProvider(new WarningProvider()) //自定义提示方式。默认log,建议自定义实现
.setRuleProvider(new RuleProvider()) //自定义默认检查规则。建议自定义实现
);
}
class WarningProvider implements IWarningProvider {
...
}
class RuleProvider implements IRuleProvider {
...
}
}
Sample
public class MainActivity extends AppCompatActivity {
// @Validate 方法调用时检查是否是合法手机号
@Mobile(warning = "wrong mobile number 1")
TextView mTV;
@Mobile(warning = "wrong mobile number 2")
String mText = "15022729132";
//@Validate 方法调用时检查是否是合法邮箱
@Email(warning = "wrong email 1")
String mEmail;
//@Validate 方法调用时检查是否非空
@NotBlank(warning = "a empty field")
@CustomeValidator
TextView mEmailText;
//@Validate 方法调用时检查是否小于10
@Max(value = 10, warning = "need less than 10")
int mValue = 8;
//@Validate 方法调用时检查是否是指定正则
@Pattern(value = "^[0-9]*$", warning = "not matched regex")
String mPattern;
//@Validate 方法调用时检查是否长度在0 和2 之间
@Size(min = 0, max = 2, warning = "wrong list size")
List<String> mList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Validator.inject(this);
mEmailText = findViewById(R.id.tv_email);
mEmailText.setText("123");
mTV = findViewById(R.id.tv_text);
mTV.setText("13651234143");
mEmail = "@";
mPattern = "123";
findViewById(R.id.tv_list).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
validate3(mList);
}
});
mTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
validate1("11", 8);
}
});
mEmailText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
validate2("123");
}
});
}
//检查成员变量 :mTV,mText;
//检查参数 : s , i
@Validate({"mTV", "mText"})
public void validate1(@CustomeValidator String s,
@Min(value = 10, warning = "need more than 10") int i) {
}
//validate the field :mEmail,mEmailText;
//validate the parameter : pattern
@Validate({"mEmail", "mEmailText"})
public void validate2(@Pattern(value = "^[0-9]*$", warning = "not matched regex") String pattern) {
}
//validate the field :mPattern,mValue;
//validate the parameter : list
@Validate({"mPattern", "mValue"})
public void validate3(@Size(min = 1, max = 2, warning = "wrong list size") List list) {
}
}
自定义规则检查
提供自定义规则检查
具体步骤 案例:登陆状态检查
1.自定义注解
@Documented
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(LoginRule.class) //Must have a Constraint Annotation,and define a check rule
public @interface LoginValiadtor {
String value() default "LoginValidator";
}
2. 自定义检查规则
public class LoginRule implements IRuleValidator<LoginValiadtor> { //需要使用方法一中定义的LoginValiadtor
UserInfo userInfo;
@Override
public void initialize(LoginValiadtor loginValiadtor, Object t) {
if (t instanceof UserInfo) {
userInfo = (UserInfo) t;
}
}
@Override
public boolean isValid() {
return userInfo != null && userInfo.isLogin(); //check the login status
}
@Override
public void showWarning() {
// Toast.makeText(context, "请登录", Toast.LENGTH_SHORT);
Log.d("TAG", "请登录");
}
}
3.使用
与默认注解一致
网友评论