J'essaie d'implémenter listener bindings , mais lorsque j'exécute mon code, l'erreur suivante apparaît:
Caused by: Android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'Android:onClick' with parameter type lambda on Android.widget.Button. file:~/GithubBrowser/app/src/main/res/layout/loading_state.xml loc:30:31 - 30:52 ****\ data binding error ****
C'est le fichier de mise en page en question:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<data>
<import type="com.example.app.data.model.Resource"/>
<import type="com.example.app.data.model.Status"/>
<variable name="resource" type="Resource"/>
<variable name="callback" type="com.example.app.ui.common.RetryCallback"/>
</data>
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:gravity="center"
Android:padding="@dimen/default_margin">
<Button Android:id="@+id/retry"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/retry"
Android:onClick="@{() -> callback.retry()}"/>
</LinearLayout>
</layout>
Et voici l'interface RetryCallback
référencée dans la mise en page:
package com.example.app.ui.common
interface RetryCallback {
fun retry()
}
Le build.gradle
de niveau supérieur:
buildscript {
ext.Android_tools_version = '3.0.0-alpha3'
ext.kotlin_version = '1.1.2-5'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath "com.Android.tools.build:gradle:$Android_tools_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
ext {
architecture_version = '1.0.0-alpha2'
constraint_version = '1.0.2'
dagger_version = '2.11'
espresso_version = '2.2.2'
glide_version = '3.7.0'
junit_version = '4.12'
mockito_version = '2.7.19'
mock_server_version = '3.6.0'
moshi_version = '1.5.0'
retrofit_version = '2.2.0'
support_version = '25.4.0'
timber_version = '4.5.1'
}
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'https://maven.google.com' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Et le module d'application build.gradle
:
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-kapt'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
testCoverageEnabled !project.hasProperty('Android.injected.invoked.from.ide')
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
kapt {
generateStubs = true
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
compile "com.Android.support:appcompat-v7:$support_version"
compile "com.Android.support:cardview-v7:$support_version"
compile "com.Android.support:design:$support_version"
compile "com.Android.support:recyclerview-v7:$support_version"
compile "com.Android.support.constraint:constraint-layout:$constraint_version"
compile "Android.Arch.lifecycle:extensions:$architecture_version"
compile "Android.Arch.lifecycle:runtime:$architecture_version"
compile "Android.Arch.persistence.room:runtime:$architecture_version"
compile "com.google.dagger:dagger:$dagger_version"
compile "com.google.dagger:dagger-Android:$dagger_version"
compile "com.google.dagger:dagger-Android-support:$dagger_version"
compile "com.squareup.moshi:moshi:$moshi_version"
compile "com.squareup.retrofit2:retrofit:$retrofit_version"
compile "com.squareup.retrofit2:converter-moshi:$retrofit_version"
compile "com.github.bumptech.glide:glide:$glide_version"
compile "com.jakewharton.timber:timber:$timber_version"
kapt "com.Android.databinding:compiler:$Android_tools_version"
kapt "com.google.dagger:dagger-Android-processor:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "Android.Arch.persistence.room:compiler:$architecture_version"
kapt "Android.Arch.lifecycle:compiler:$architecture_version"
testCompile "junit:junit:$junit_version"
testCompile "com.squareup.okhttp3:mockwebserver:$mock_server_version"
testCompile ("Android.Arch.core:core-testing:$architecture_version", {
exclude group: 'com.Android.support', module: 'support-compat'
exclude group: 'com.Android.support', module: 'support-annotations'
exclude group: 'com.Android.support', module: 'support-ccore-utils'
})
androidTestCompile "com.Android.support:appcompat-v7:$support_version"
androidTestCompile "com.Android.support:cardview-v7:$support_version"
androidTestCompile "com.Android.support:design:$support_version"
androidTestCompile "com.Android.support:recyclerview-v7:$support_version"
androidTestCompile ("com.Android.support.test.espresso:espresso-core:$espresso_version", {
exclude group: 'com.Android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile ("com.Android.support.test.espresso:espresso-contrib:$espresso_version", {
exclude group: 'com.Android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile "org.mockito:mockito-Android:$mockito_version"
}
Je viens d'avoir ce problème et j'ai réussi à le résoudre en supprimant les dossiers .idea, .gradle et gradle et en laissant Android Studio recréer l'intégralité du projet à partir de fichiers gradle.
Assurez-vous que apply plugin: 'kotlin-kapt'
est dans build.gradle.
Si vous vous en tenez à cela et qu’il n’est pas nécessaire de reconstruire le projet, supprimer des répertoires, effacer les paramètres de l’AS n’importe quoi. Le IDE est correct sans l'avoir mais la construction échoue.
Ce serait bien si Android studio avait de meilleurs messages d'erreur pour cela.
Rebuilding
projet a fonctionné pour moi.
Build>Rebuild
Build>Rebuild
Il suffit de reconstruire le projet. C’est probablement parce que vous avez refactorisé
Comme suggéré par tous les autres frères frères, oui, l'erreur disparaît après la suppression des dossiers .idea, .gradle et gradle.
(Ceci est juste pour une personne curieuse pourquoi cela se produit, voici mon cas d'utilisation):.
Cas valide: Cette erreur est générée si vous avez une erreur dans le fichier XML. Commencez par lire attentivement le fichier XML et si vous trouvez un problème, corrigez-le.
Cas invalide: Pour moi, le problème a été soulevé pour un fichier déjà supprimé du projet ou renommé et la liaison de données faisait référence à l'ancien fichier.
Je ne sais pas comment résoudre ce problème à chaque fois, mais j'ai un certain nombre de choses qui fonctionnent parfois et qui ne fonctionnent pas.
Numéro fixe 1:
Exécution de '' wrapper dégradé '' dans la racine du projet.
Numéro fixe 2:
Projet Android Studio Clean
Supprimez ensuite ces dossiers à la racine du projet:
rm -rf .gradle /
rm -rf app/build /
rm -rf build
rm -rf gradle
rm -rf gradlew
Android Studio Invalider et redémarrer
Tout devrait être revenu à la normale maintenant.
Travaillez pour moi ... Si l'ordre se mélange ou rate, cela ne fonctionne pas pour moi.