android - databindingutil - Encuadernación del oyente; No puede encontrar el Setter
databinding kotlin android studio (7)
- Eliminar la carpeta .gradle.
- Ejecutar el proyecto.
- Limpia el proyecto.
- Ejecutar el proyecto.
Trabaja para mi. Si el orden se mezcla o falla, no funciona para mí.
Estoy intentando implementar enlaces de escucha , pero cuando ejecuto mi código, aparece el siguiente error:
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 ****
Este es el archivo de diseño en cuestión:
<?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>
Y esta es la interfaz RetryCallback
referenciada en el diseño:
package com.example.app.ui.common
interface RetryCallback {
fun retry()
}
Editar
El build.gradle
nivel build.gradle
:
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
}
Y el módulo de aplicación 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"
}
Acabo de tener ese problema y he logrado resolverlo al eliminar las carpetas .idea, .gradle y gradle y dejar que Android Studio vuelva a crear todo el proyecto desde cero desde los archivos de gradle.
Asegúrese de apply plugin: ''kotlin-kapt''
está en build.gradle.
Si está ejecutando esto, no es necesario reconstruir el proyecto, eliminar directorios, borrar la configuración de AS. El IDE está bien sin tenerlo pero el edificio falla.
Sería bueno si Android Studio tuviera mejores mensajes de error para esto.
Caso válido: este error se genera si tiene un error en el archivo xml. En primer lugar, lea detenidamente el xml y si encuentra un problema, corríjalo.
Caso no válido: para mí, el problema se planteó para un archivo que ya se eliminó del proyecto o se cambió el nombre del archivo y el enlace de datos hacía referencia al archivo anterior.
No estoy seguro de cómo deshacerme del problema cada vez, pero tengo varias cosas que a veces funcionan y otras no.
Arreglar el número 1:
Ejecutando ''wrapper de gradle'' en la raíz del proyecto.
Arreglar el número 2:
Android Studio Clean Project
Luego borre estas carpetas en la raíz del proyecto:
rm -rf .gradle /
rm -rf app / build /
rm -rf construir
rm -rf gradle
rm -rf gradlew
Android Studio Invalidar y reiniciar
Todo debería volver a la normalidad ahora.
Según lo sugerido por todos los demás hermanos, sí, el error se resuelve después de eliminar las carpetas .idea, .gradle y gradle.
(esto es solo para alguien curioso por qué sucede esto, a continuación está mi caso de uso): creo que este problema se debió a mi proyecto porque agregué una biblioteca personalizada de rxRecycleViewDataBinding últimamente que podría causar algunos errores de enlace al mezclar las referencias de enlace.
Solo reconstruye el proyecto. Probablemente es porque hiciste alguna refactorización.
Rebuilding
proyecto de Rebuilding
funcionó para mí.
- Reconstruir proyecto desde
Build>Rebuild
- Solucione los problemas si obtiene en los registros de compilación.
- Reconstruir el proyecto de nuevo desde
Build>Rebuild