web-dev-qa-db-fra.com

Classe en double trouvée dans le fichier '/activity_login.xml' DataBinding, BR non généré

Je suis principalement coincé avec le problème de liaison de données Android BR. Il y a un seul fichier activity.xml toujours mais la classe de liaison générée affiche une erreur. S'il vous plaît laissez-moi savoir comment résoudre ce problème.

 enter image description here

21
Dipendra Sharma

Je le ferais en ajoutant Android.databinding.enableV2 = true dans les propriétés de Gradle. Cela fonctionnait bien.

3
Dipendra Sharma

Si vous utilisez la salle ORM Vérifiez votre DAO clazz

Exemple:

@Mettre à jour Mise à jour de la chaîne (appel); // échec

@Update
long update(Call call);//fail

@Update
int update(Call call);//success databinding build


@Update
void update(Call call);//success databinding build
2
0 cęĥ

Dans mon cas, le problème était dû au fait que l'ARouter ne supportait pas très bien kotlin. Quand j'utilise l'annotation @Autowired, la construction a échoué et la classe dataBinding introuvable. La classe en double trouvée dans

le fichier ActivityLoginBinding。Alors ajoutez @JvmField avant @ Autowired Il fonctionne et construit avec succès

ainsi, lorsque vous utilisez AndroidStuido conver Java vers Kotlin , Faites attention Les fichiers Kotin générés de cette manière peuvent comporter des erreurs de syntaxe。Il peut s'agir d'une fonction statique Java, l'annotation de @bindingadapter dans la liaison de données, convertie en kotlin, et vous obtenez une error.Solve this, et vous avez terminé

par exemple en Java 

 @BindingConversion
    public static String converStr(CommonUser user) {
        return user.getAge() + user.getName() + user.isSingle();
    }

    //同上,不需要显示因如何调用,在xml中即可使得textview有一个 bg 的属性,app命名空间的,
    @BindingAdapter({"bg"})
    public static void randomName(TextView tv, String color) {
        tv.setTextColor(Color.parseColor(color));
    }

quand utiliser ceci dans Kotlin, comme ceci:

//this is root node in the kotlin file ,no {} 
@BindingAdapter("srlEnableRefresh")
fun randomName( tv:TextView, color:String) {
    tv.setTextColor(Color.parseColor(color))
}

ou 

object Tools{
   @JvmStatic
    @BindingAdapter("srlEnableRefresh")
    fun randomName( tv:TextView, color:String) {
        tv.setTextColor(Color.parseColor(color))
    } 
}

J'espère que cette réponse répond à votre question. Mon anglais est très pauvre! ^ ^

1
志威梦

J'ai eu le même problème. Dans mon cas, j'utilisais Room et je n’écrivais pas la méthode de définition dans la classe Entity. Donc, vous vérifiez également dans votre cas.

1

Si vous utilisez Room ORM, examinez-les si vous en avez récemment changé. Tout problème lié à l'analyse des requêtes SQL et au retour du type de votre méthode qui doit correspondre pleinement au résultat de la requête peut affecter la liaison des données et afficher des erreurs non normales. 

J'avais un problème similaire:

@Query("SELECT * from NotSellingReason where NotSellReasonId > 0")
    List<ReasonModel> getUnvisitingReasons();

J'ai eu un mauvais type générique ici. Je dois utiliser ReasonEntity au lieu de ReasonModel et cela prend beaucoup de temps pour l'obtenir!

Un autre problème qui peut faire échouer la liaison de données concerne Dagger DI. Si vous utilisez DI dans votre projet, assurez-vous que tous injectés classes, ... sont fournis ou liés par le poignard.

1
Siamak Ferdos

J'ai eu le même problème, et c'était parce que j'avais une référence à une variable d'une classe inconnue 

<variable name="handler" type="com.example.org.UnknownClass" />

Je devais juste corriger cette erreur.

1
djleop

Dans mon cas, ce problème était dû au fait que, dans la classe Entity de Room ORM, les noms de setter et de getter de champ privé ne correspondaient pas à la convention de dénomination du bean Java.

1
Alektas

Vous pouvez obtenir cette erreur lorsque vous incluez une mise en page au format xml. 

<include layout="@layout/any_layout" />

pour inclure une autre mise en page dans votre xml, suivez ceci https://stackoverflow.com/a/38681418/1893503

1
rajeswari ratala

Dans mon cas, c’était le problème de la version Dagger 2. 2.17 et plus (la version la plus récente est 2.20) ne fonctionnait pas. Revenir à la version 2.16 a résolu le problème pour moi.

Voir plus de discussion à ce sujet ici

1
Tanin

Dans mon cas, cela se produisait parce que je changeais List en ArrayList; Le problème était résolu lorsque nous sommes revenus à List;

 @Query("SELECT * FROM " + PurchaseConstants.TABLE_NAME + " ORDER BY purchaseTime DESC")
    List<Purchase> getAllPurchases();
1
100RaBH

dans mon cas, le problème était dû au modificateur privé de la méthode onclick attribuée à butterknife, assurez-vous que tous les champs et méthodes affectés à butterknife sont publics.

1
Islam Assem

Il y a plusieurs raisons à ce problème. Vous pouvez essayer cette commande. travaillé:)

gradlew build 
0
user5531997

pour moi remplacer kapt à annotationProcessor travaillé

annotationProcessor "com.Android.databinding:compiler:3.1.3"
0
dastan

Le nom de la classe de liaison personnalisée a résolu mon problème

<data class="ContactItem">
    …
</data>
0
xyz