2017-05-08 1 views
0

J'essaie d'utiliser la bibliothèque Saripaar pour valider les formulaires avant qu'ils ne soient envoyés. Mais j'ai un problème qui gonfle dans le XML, et je ne sais pas si c'est un conflit avec Butterknife.Validation avec Saripaar lib et Butterknife conflict

L'erreur pris dans la 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) 

Certaines parties de Importants de la 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); 
     } 


    } 
} 
+0

'Causé par: java.lang.UnsupportedOperationException: Impossible de résoudre l'attribut à l'index 4: TypedValue {t = 0x2/d = 0x1010099 a = 1}' Vous devriez publier votre XML. Cela ne ressemble à aucun problème avec les bibliothèques tierces que vous avez utilisées. –

Répondre

0

Ajouter ButterKnife.bind(this); dans votre onCreate Méthode.

+0

Désolé, je le fais dans MVP + Dagger Arch. Mon OnCreate ressemble à: @Override protected void onCreate (Bundle savedInstanceState) { super.onCrée (savedInstanceState); setContentView (R.layout.activity_login); getActivityComponent() .inject (this); setUnBinder (ButterKnife.bind (this)); mPresenter.onAttach (LoginActivity.this); validator = new Validateur (this); validator.setValidationListener (this); } – MAOL