Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SariPar验证库未发现任何规则错误_Android_Validation_Mvp_Butterknife_Saripaar - Fatal编程技术网

Android SariPar验证库未发现任何规则错误

Android SariPar验证库未发现任何规则错误,android,validation,mvp,butterknife,saripaar,Android,Validation,Mvp,Butterknife,Saripaar,我试图在我的项目上使用SariPar验证,但它抛出以下错误: java.lang.IllegalStateException:未找到任何规则。你一定在 至少要验证一个规则。如果您使用的是自定义批注,请 确保已使用“Validator.register()”注册它们 方法 我的体系结构将处理视图的责任划分为一个类,例如,对于LoginActivity,我有LoginView,我在其中处理视图逻辑,如ButterKnife注入、事件侦听等。在这个类中,我有注释字段。我的LoginView如下所示:

我试图在我的项目上使用SariPar验证,但它抛出以下错误:

java.lang.IllegalStateException:未找到任何规则。你一定在 至少要验证一个规则。如果您使用的是自定义批注,请 确保已使用“Validator.register()”注册它们 方法

我的体系结构将处理视图的责任划分为一个类,例如,对于LoginActivity,我有LoginView,我在其中处理视图逻辑,如ButterKnife注入、事件侦听等。在这个类中,我有注释字段。我的LoginView如下所示:

import android.content.res.ColorStateList;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.ImageViewCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.AppCompatEditText;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.mobsandgeeks.saripaar.ValidationError;
import com.mobsandgeeks.saripaar.Validator;
import com.mobsandgeeks.saripaar.annotation.Email;
import com.mobsandgeeks.saripaar.annotation.NotEmpty;
import com.mobsandgeeks.saripaar.annotation.Password;
import com.serti.android.feenicia.validatortest.R;
import com.serti.android.feenicia.validatortest.screen.login.LoginActivity;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import rx.Observable;
import rx.subjects.PublishSubject;

public class LoginView implements Validator.ValidationListener {
    public static final String LOGIN_ACTION = "LOGIN";
    @BindView(R.id.login_button)
    Button loginButton;
    @BindView(R.id.username_edittext)
    @NotEmpty
    @Email
    AppCompatEditText usernameEditText;
    @BindView(R.id.password_edittext)
    @Password(min = 8, scheme = Password.Scheme.ALPHA_NUMERIC_MIXED_CASE_SYMBOLS)
    AppCompatEditText passwordEditText;
    @BindView(R.id.eye_imageview)
    ImageView eyeImageView;
    @BindView(R.id.loading_progressbar)
    ProgressBar loadingProgressBar;

    private boolean passwordIsVisible;

    private AlertDialog confirmPaymentDialog;
    private LoginActivity context;
    private View rootView;

    private PublishSubject<String> clickSubject = PublishSubject.create();

    Validator validator;

    public LoginView(LoginActivity context){
        this.context = context;
        FrameLayout parent = new FrameLayout(context);
        parent.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        rootView = LayoutInflater.from(context).inflate(R.layout.activity_login, parent, true);
        ButterKnife.bind(this, rootView);

        validator = new Validator(context);
        validator.setValidationListener(this);

        eyeImageView.setOnClickListener(v -> handleClick(v.getId()));
        loginButton.setOnClickListener(v -> handleClick(v.getId()));
        passwordIsVisible = false;
    }

    @Override
    public void onValidationSucceeded() {
        String action = null;
        Snackbar.make(rootView, "Validated", Snackbar.LENGTH_LONG).show();
        loginButton.setVisibility(View.GONE);
        loadingProgressBar.setVisibility(View.VISIBLE);
        action = LOGIN_ACTION;

        if(action != null){
            clickSubject.onNext(action);
        }
    }

    @Override
    public void onValidationFailed(List<ValidationError> errors) {
        for(ValidationError error : errors){
            View view = error.getView();
            String message = error.getCollatedErrorMessage(context);
            if(view instanceof AppCompatEditText){
                ((AppCompatEditText) view).setError(message);
            } else {
                Snackbar.make(view, message, Snackbar.LENGTH_LONG).show();
            }
        }
    }

    public String getUserName(){
        return usernameEditText.getText().toString();
    }
    public String getPassword(){
        return passwordEditText.getText().toString();
    }

    private void handleClick(int id){
        String action = null;
        switch (id){
            case R.id.login_button:
                validator.validate();
                break;
            case R.id.eye_imageview:
                togglePasswordVisibility();
        }
    }

    private void togglePasswordVisibility(){
        int color = 0;
        if(passwordIsVisible){
            passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
//            eyeImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.eye_white));
            color = ContextCompat.getColor(context, R.color.dark_blue_button);
            ImageViewCompat.setImageTintList(eyeImageView, ColorStateList.valueOf(color));
        }else{
            passwordEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
//            eyeImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.eye_white));
            color = ContextCompat.getColor(context, R.color.dark_gray);
        }
        ImageViewCompat.setImageTintList(eyeImageView, ColorStateList.valueOf(color));
        passwordIsVisible = !passwordIsVisible;
        passwordEditText.setSelection(passwordEditText.getText().length());
    }

    private void showIncompleteCredentialsMessage() {
        Snackbar.make(loginButton, context.getText(R.string.incomplete_credentials_title), Snackbar.LENGTH_LONG).show();
    }

    public View getView(){
        return rootView;
    }
    public Observable<String> observeClicks(){
        return clickSubject;
    }
    public void openMainScreen(){
        context.startMainActivity();
    }

    public void openSearchTicketsScreen() {
        context.startSearchTicketsActivity();
    }

    public void showWrongCredentialsMessage() {
        loginButton.setVisibility(View.VISIBLE);
        loadingProgressBar.setVisibility(View.GONE);
        Snackbar.make(loginButton, context.getText(R.string.wrong_credentials_title), Snackbar.LENGTH_LONG).show();
    }

    public void setContext(LoginActivity context) {
        this.context = context;
    }
}
导入android.content.res.ColorStateList;
导入android.support.design.widget.Snackbar;
导入android.support.v4.content.ContextCompat;
导入android.support.v4.widget.ImageViewCompat;
导入android.support.v7.app.AlertDialog;
导入android.support.v7.widget.AppCompatiEditText;
导入android.text.method.HideReturnsTransformationMethod;
导入android.text.method.PasswordTransformationMethod;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.FrameLayout;
导入android.widget.ImageView;
导入android.widget.ProgressBar;
导入com.mobsandgeeks.saripar.ValidationError;
导入com.mobsandgeeks.saripar.Validator;
导入com.mobsandgeeks.saripar.annotation.Email;
导入com.mobsandgeeks.saripar.annotation.NotEmpty;
导入com.mobsandgeeks.saripar.annotation.Password;
导入com.serti.android.feenicia.validatortest.R;
导入com.serti.android.feenicia.validatortest.screen.login.LoginActivity;
导入java.util.List;
导入butterknife.BindView;
进口毛刀,毛刀;
进口接收。可观察;
导入rx.subject.PublishSubject;
公共类LoginView实现Validator.ValidationListener{
公共静态最终字符串LOGIN\u ACTION=“LOGIN”;
@BindView(R.id.login_按钮)
按钮登录按钮;
@BindView(R.id.username\u edittext)
@空空如也
@电子邮件
AppCompatiEditText用户名EditText;
@BindView(R.id.password\u edittext)
@密码(min=8,scheme=Password.scheme.ALPHA\u NUMERIC\u混合\u CASE\u符号)
AppCompativeText密码EditText;
@BindView(R.id.eye\U imageview)
图像视图眼图像视图;
@BindView(R.id.loading\U progressbar)
进度条加载进度条;
私有布尔密码可见;
私人AlertDialog confirmPaymentDialog;
私人物流活动语境;
私有视图rootView;
private PublishSubject clickSubject=PublishSubject.create();
验证器;
公共登录视图(登录活动上下文){
this.context=上下文;
FrameLayout父级=新的FrameLayout(上下文);
父.setLayoutParams(新的FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父,ViewGroup.LayoutParams.MATCH_父));
rootView=LayoutInflater.from(context).充气(R.layout.activity\u login,parent,true);
ButterKnife.bind(这个,rootView);
验证器=新验证器(上下文);
setValidationListener(这个);
setOnClickListener(v->handleClick(v.getId());
setOnClickListener(v->handleClick(v.getId());
passwordIsVisible=false;
}
@凌驾
public void onValidationSucceeded(){
字符串操作=null;
Snackbar.make(rootView,“已验证”,Snackbar.LENGTH_LONG.show();
设置可见性(View.GONE);
加载ProgressBar.setVisibility(View.VISIBLE);
动作=登录动作;
如果(操作!=null){
单击subject.onNext(操作);
}
}
@凌驾
public void onValidationFailed(列表错误){
对于(ValidationError错误:错误){
视图=错误。getView();
字符串消息=错误。GetCollaterRorMessage(上下文);
if(查看AppCompativeText的实例){
((AppCompativeText)视图).setError(消息);
}否则{
Snackbar.make(视图、消息、Snackbar.LENGTH_LONG).show();
}
}
}
公共字符串getUserName(){
返回usernameEditText.getText().toString();
}
公共字符串getPassword(){
返回passwordEditText.getText().toString();
}
私有void handleClick(int-id){
字符串操作=null;
开关(id){
案例R.id.login_按钮:
validator.validate();
打破
案例R.id.eye_图像视图:
切换PasswordVisibility();
}
}
私有void togglePasswordVisibility(){
int color=0;
如果(密码可见){
passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
//setImageDrawable(context.getResources().getDrawable(R.draawable.eye_-white));
color=ContextCompat.getColor(上下文,R.color.dark\u blue\u按钮);
ImageViewCompat.setImageTintList(eyeImageView,ColorStateList.valueOf(color));
}否则{
passwordEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
//setImageDrawable(context.getResources().getDrawable(R.draawable.eye_-white));
color=ContextCompat.getColor(context,R.color.dark\u gray);
}
ImageViewCompat.setImageTintList(eyeImageView,ColorStateList.valueOf(color));
passwordIsVisible=!passwordIsVisible;
passwordEditText.setSelection(passwordEditText.getText().length());
}
私有void showIncompletedCredentialsMessage()不完整{
Snackbar.make(loginButton,context.getText(R.string.completed\u credentials\u title),Snackbar.LENGTH\u LONG.show();
}
公共视图getView(){
返回rootView;
}
公众可观测到的观测卫星(){
返回点击主题;
}
public void openMainScreen(){