Search code examples
androidkotlinandroid-databindingdata-class

databinding msg Could not find accessor within kotlin dataclass


Error message

Found data binding error(s):

[databinding] {"msg":"Could not find accessor com.dubhe.room.entity.User.name","file":"app\\src\\main\\res\\layout\\activity_add_user.xml","pos":[{"line0":31,"col0":28,"line1":31,"col1":36}]}

My layout XML

<?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
            alias="user"
            type="com.dubhe.room.entity.User" />

        <variable
            name="add"
            type="android.view.View.OnClickListener" />

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:title="addUser" />

        <EditText
            android:id="@+id/editUserName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="name"
            android:text="@{user.name}" />     <-error in this line.

        <EditText
            android:id="@+id/editUserAge"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="age"
            android:inputType="number"
            android:text="@{user.age}" />

        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{add}"
            android:text="Add" />

    </LinearLayout>
</layout>

My entity is a kotlin data class.

@Entity(tableName = "user")
data class User(
    @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "user_id") var id: Int = 0,
    @ColumnInfo(name = "user_name")var name: String = "",
    @ColumnInfo(name = "user_age")var age: Int = 0,
    @Ignore var isChecked: Boolean = false
)

build.gradle in app directory.

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.dubhe.databinding"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    dataBinding {
        enabled = true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.android.material:material:1.1.0-alpha08'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
//    implementation 'com.android.support:support-vector-drawable:29.0.0'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    //Room
    implementation 'android.arch.persistence.room:runtime:2.1.4'

    //BaseRecyclerViewAdapter
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'

    annotationProcessor 'android.arch.persistence.room:compiler:2.1.4'

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'

}

No matter if I clean and rebuild or Invalidate Caches, I can't compile.


Solution

  • You are using an import instead of a variable:

    This:

    <import alias="user" type="com.dubhe.room.entity.User" />
    

    should be this:

    <variable name="user" type="com.dubhe.room.entity.User" />