Erreur à l'aide de la liaison de données dans android
Je suis en train de tester la liaison de données comme indiqué dans le guide ici.
J'ai inclus dans mon construire.gradle fichier (de module d'application) :
compileSdkVersion 'android-MNC'
buildToolsVersion '23.0.0 rc2'
Dans le projet de construction.gradle fichier, j'ai inclus dans mon dépendances :
classpath "com.android.tools.build:gradle:1.3.0-beta2"
classpath "com.android.databinding:dataBinder:1.0-rc0"
Le fichier de configuration est exactement la même que celle donnée dans le guide.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
D'abord, il a donné une erreur Element layout does not have the required attribute layout_width and layout_height
.
J'ai essayé de réparer en attribuant match_parent à la fois. Puis j'ai eu l'erreur
Error parsing XML: duplicate attribute
sur les lignes où j'ai affecté layout_height
et layout_width
à la disposition linéaire.
De nouveau, j'ai essayé de résoudre ce problème en supprimant ces attributs. Maintenant, chaque fois que j'essaie de compiler, je vois ce- error: package my.package.name.databinding
n'existe pas.
La complétion de code fonctionne parfaitement dans mon Fragment où je suis en train d'utiliser cette mise en page.
Donc, qu'ai-je manqué ?
- vous pouvez poster votre
user
classe POJO etActivity
classe - Double vérifier le package de référence dans le xml
type
attribut.my.package.User
oucom.example.User
- Je suis tombé sur cette erreur et a finalement découvert que c'était parce que j'avais un double androïde espace de noms xml. La liaison de données de la bibliothèque dans Android Studio est reeeeaaaally mal à propos de vous laisser savoir où est le problème maintenant. J'espère que la prochaine mise à jour permettra de clarifier les choses.
- Vous pouvez également consulter ceci tutoriel pour votre référence.
Vous devez vous connecter pour publier un commentaire.
retrait
apply plugin: 'com.neenbedankt.android-apt'
de mon build.gradle résolu mon problème.classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
la mise à niveau à 1,8 résolu le problèmeNPA
dansbutterknife
@BindView` après la suppression de cetteapt
trucsDe vos fixations dans le fichier xml peut être incorrect.
Assurez-vous de faire
type
attributs de référence valable pour objet de données?type="my.package.Class"
name="client"
->"@{client.field}"
public
ou encapsulé avec des gettersOldNameBinding -> NewNameBinding
BaseObservable
/classe de Données pour être accessible à ladatabinding
paquet, champs/setters doit êtrepublic
.c'est généralement parce qu'il ya une erreur dans votre XML fichier de mise en page et il ne peut pas générer de l'objet de liaison. Assurez-vous d'écrire le type de données correctement, vérifiez inférieure ou supérieure de votre écriture.
Et assurez-vous que l'objet est en droit d'appeler:
Cela semble être un problème dans android studio. L'éditeur va le marquer comme une erreur, cependant, il sera toujours compilé.
J'ai eu le même problème et j'ai donc cloné cet exemple repo pour tester mon système est configuré correctement à l'appui de la liaison de données de l'api https://github.com/mgrzechocinski/android-bindings-example
Ignorer l'avertissement d'erreur sur la
layout
tag. C'est à tort.Quelque chose que j'ai remarqué, c'est que vous n'avez pas nécessairement besoin de la
data
si la balise sont tout simplement à l'aide de la liaison de données pour accéder aux vues des articles à travers le BindingActivity classe qui est générée.data
tag?? Cet article dit le contraire! developer.android.com/tools/data-binding/guide.html<data name="UserData"></data>
et puis la classe générée sera UserData plutôt que LayoutNameBinding. Pour dire qu'il n'a pas BESOIN de la balise de données ignore qu'il l'utilise et ce que vous gagnez en l'utilisant.Si vous utilisez android-apt' plugin de poignard ou d'autres bibliothèques, après l'activation de la liaison de données, vous devez supprimer 'android-apt' plugin et l'utilisation de 'condition' au lieu de 'apt' dans vos dépendances. Par exemple, si vous utilisez la dague, supprimer cette
et ce
puis remplacer
avec
Selon la version actuelle du guide (2015-11-11) vous avez juste à ajouter deux dépendances:
Dans le fichier build.gradle du projet, ajoutez le gradle de dépendance. Actuellement, la plus récente version est 1.5.0-beta3
Et dans le fichier build.gradle du module de liaison de données de la section:
L'erreur
peut ocurr à cause d'une incompatibilité entre le xml et la classe POJO
Vous devez être très prudent que votre classe POJO membres de données doit être
public
si vous ne créez pas de la lecture des poseurs.Si vous avez de simples POJO sans getter ou un setter
Si vous faites de lecture setter, javaBean classe de style
Dans mon cas, le problème était que j'étais en ajoutant
layout_height
etlayout_width
à lalayout
tag et aussi à ma racine mise en page. J'ai juste enlevé les deux attributs de lalayout
tag et résolu le problème.Que vous avez un problème ou de non-concordance entre votre modèle et votre fichier de mise en page. Dans mon cas, j'ai eu:
mais mon modèle de classe a été comme suit:
//C'est en vertu de activity_main xml .
//Ceci est une Élève de la Classe
public String prenom ;
public String nom ;
}
Semble que vous avez oublié d'ajouter la liaison de données plugin pour votre application gradle fichier:
apply plugin: 'com.android.databinding'
Vous devez l'appliquer à n'importe quel module que vous voulez utiliser la liaison de données.
Aussi, vous ne devez pas ajouter layout_w/h à la
layout
tag, c'est juste une Android Studio bug, déjà fixé dans psba.apply plugin: 'com.android.databinding
, et reçois toujours ce message d'erreur.apt
en ce qui concerne la liaison de données?apply plugin: 'com.android.databinding'
n'est plus nécessaireJe souffre aussi avec le même problème. Mais mon erreur est
De l'utilisateur de la classe de variables déclarées comme pas un public. Donc, nous devrions déclarer la classe POJO variables comme public.
Alors résolu mon problème.