Validation with Saripaar lib and Butterknife conflict

643 Views Asked by At

I'm trying to use the library Saripaar to validate forms before they will be sended. But I'm having some inflating problem in the XML, and I don't know if it is a conflict with Butterknife.

The error caught in the console:

android.view.InflateException: Binary XML file line #17: Binary XML file line #17: Error inflating class TextView
   Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class TextView
   Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 4: TypedValue{t=0x2/d=0x1010099 a=1}
       at android.content.res.TypedArray.getColor(TypedArray.java:459)
       at android.widget.TextView.<init>(TextView.java:771)
       at android.widget.TextView.<init>(TextView.java:704)
       at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:62)
       at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:58)
       at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103)
       at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1029)
       at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1087)
       at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:47)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater$WrapperFactory2.onCreateView(CalligraphyLayoutInflater.java:280)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
       at uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater.inflate(CalligraphyLayoutInflater.java:60)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
       at android.widget.Editor.showError(Editor.java:453)
       at android.widget.Editor.setError(Editor.java:489)
       at android.widget.TextView.setError(TextView.java:5100)
       at android.widget.TextView.setError(TextView.java:5085)
       at com.testapp.probe.mvp.ui.login.LoginActivity.onValidationFailed(LoginActivity.java:166)
       at com.mobsandgeeks.saripaar.Validator.triggerValidationListenerCallback(Validator.java:721)
       at com.mobsandgeeks.saripaar.Validator.validateFieldsWithCallbackTill(Validator.java:697)
       at com.mobsandgeeks.saripaar.Validator.validateUnorderedFieldsWithCallbackTill(Validator.java:679)
       at com.mobsandgeeks.saripaar.Validator.validate(Validator.java:334)
       at com.mobsandgeeks.saripaar.Validator.validate(Validator.java:295)
       at com.testapp.probe.mvp.ui.login.LoginActivity.validate(LoginActivity.java:141)
       at com.testapp.probe.mvp.ui.login.LoginActivity.onServerLoginClick(LoginActivity.java:107)
       at com.testapp.probe.mvp.ui.login.LoginActivity_ViewBinding$1.doClick(LoginActivity_ViewBinding.java:40)
       at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
       at android.view.View.performClick(View.java:5637)
       at android.view.View$PerformClick.run(View.java:22429)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Some importants parts of the source:

@BindView(R.id.et_email)
@Order(1)
@NotEmpty(emptyTextResId = R.string.empty_email)
@Email(messageResId = R.string.str_email_empty)
EditText mEmailEditText;

@BindView(R.id.et_password)
@Order(2)
@NotEmpty(emptyTextResId = R.string.empty_email)
@Password(min = 4, scheme = 
Password.Scheme.ALPHA_NUMERIC_MIXED_CASE_SYMBOLS, messageResId = 
R.string.str_password_error)
EditText mPasswordEditText;

private Validator validator;
private boolean validated;

...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    ...

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

}

@OnClick(R.id.bt_login)
void onServerLoginClick(View v) {
    if(validate())
        mPresenter.onServerLoginClick(mEmailEditText.getText().toString(), mPasswordEditText.getText().toString());
}

protected boolean validate() {
    if (validator != null)
        validator.validate();
    return validated;           // would be set in one of the callbacks below
}

@Override
public void onValidationSucceeded() {
    validated = true;
}

@Override
public void onValidationFailed(List<ValidationError> errors) {
    validated = false;

    for (ValidationError error : errors) {
        View view = error.getView();
        String message = error.getCollatedErrorMessage(this);

        // Display error messages
        if (view instanceof Spinner) {
            Spinner sp = (Spinner) view;
            view = ((LinearLayout) sp.getSelectedView()).getChildAt(0);
        }

        if (view instanceof TextView) {
            TextView tv = (TextView) view;
            tv.setError(message);
        }

        if (view instanceof EditText) {
            EditText et = (EditText) view;
            et.setError(message);
        }

        if(view instanceof TextInputEditText) {
            TextInputEditText tiet = (TextInputEditText) view;
            tiet.setError(message);
        }


    }
}
1

There are 1 best solutions below

1
Dishonered On

Add ButterKnife.bind(this); in your onCreate Method.