6

Tout à coup, mes liaisons pour Android cessé de fonctionner, tout ce que je construis maintenant, je reçois juste ce message. Erreur: Échec de l'exécution de la tâche ': app: compileDevDebugJavaWithJavac'.Liaisons Android cessé de fonctionner

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Cannot find the getter for attribute 'android:text' with value type java.lang.String on android.widget.EditText. file:C:\path\to\layout\layout.xml loc:85:12 - 96:54 ****\ data binding error ****

Ce que j'ai essayé

D'abord il a été suggéré les liaisons ne compilera pas s'il y a des erreurs dans mes fichiers, donc supprimés tous les fichiers de mise en page où je les liaisons jusqu'à un fichier layout.xml. Là, j'ai

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@{model.name}" /> 

... et il fonctionne bien, si j'ajoute la liaison dans les deux sens android:text="@={model.name}" Il jette l'erreur précédente.

Suivant, j'ajouter

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

... il lance une nouvelle erreur. Erreur: Échec de l'exécution de la tâche ': app: compileDevDebugJavaWithJavac'.

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Could not find event 'android:textAttrChanged' on View type 'android.widget.EditText' file:C:\Users\EdgeTech\AndroidStudioProjects\purse\purse-customer\app\src\main\res\layout\get_phone_layout.xml loc:85:12 - 96:54 ****\ data binding error ****

est allé plus loin, à factoriser à ce

@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged") 
public static String captureEditTextValue(EditText view) { 
     return view.getText().toString(); 
} 

... donne toujours l'erreur précédente.

Mon installation

  • Android Studio: 2.3.3
  • Gradle: Construits Outils 2.3.3
+0

En ce qui concerne la liaison bidirectionnelle, 'android: text =" @ = {model.name} "' cette ligne est suffisante si votre variable est 'String', Si vous avez d'autres types de données alors vous devez faire l'inverse contraignant. –

+0

@RaviRupareliya oui c'est une chaîne. – oreofeolurin

+0

Puis, comme je l'ai déjà dit, si c'est 'String',' InverseBinding' n'est pas du tout nécessaire. –

Répondre

3

Deux voies besoins de ce type de liaison:

ObservableField<T> 

par exemple: dans viewModel.class

public ObservableField<String> productName = new ObservableField<>(); 

dans la disposition.xml:

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@={viewModel.productName}" /> 
2

se débarrasser des InverseBindingAdapter que je ne crois pas qu'il soit nécessaire un string. Puis, dans votre balise EditText XML, modifiez android:text="@={model.name} ->android:text="@={`` + model.name}".

+0

S'il vous plaît laissez-moi savoir si cela ne résout pas votre problème. Je vois que vous utilisez Android 2.3+ (le support minimum pour le correctif) donc cette solution pourrait très bien résoudre le problème. –

1

Vous devriez juste pouvoir changer:

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

à:

@InverseBindingAdapter(attribute = "android:text") 
public static String getText(TextView view) { 
    return view.getText().toString(); 
} 
1

Merci,

Cependant, il travaille maintenant. Il a commencé à fonctionner après la mise à niveau de mes outils Build Tools et SDK Platform vers la version . Pas encore sûr pourquoi il se cassait avec la version si.

J'ai essayé toutes les solutions fournies, tout en vain, la mise à niveau, était la seule solution qui a fonctionné pour moi.