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.
Je le ferais en ajoutant Android.databinding.enableV2 = true dans les propriétés de Gradle. Cela fonctionnait bien.
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
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! ^ ^
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.
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.
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.
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.
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
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
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();
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.
Il y a plusieurs raisons à ce problème. Vous pouvez essayer cette commande. travaillé:)
gradlew build
pour moi remplacer kapt à annotationProcessor travaillé
annotationProcessor "com.Android.databinding:compiler:3.1.3"
Le nom de la classe de liaison personnalisée a résolu mon problème
<data class="ContactItem">
…
</data>