Android Method Validator 基于Aspec

2019-03-22  本文已影响0人  aos3618

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()方法的任意类型
Email 是否是一个邮箱 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.使用

与默认注解一致

参考

上一篇 下一篇

猜你喜欢

热点阅读