Kotlin-DataBinding-Error: Check your module classpath for missing or conflicting dependencies

32,063

Solution 1

Rename your folder UserModel to userModel then clean/rebuild your project. I had the same problem and the error disapeared when set my folder's first letter to lower case. In the future use camelCase for your folders name just like for variables. Upper case on the first letter is usually for classes.

Solution 2

The reason is because one of your package name begins with Capital.

The class name which uses databinding should begin with capital, and package name should start with lower case. [This is not just for databinding, this is the convention followed commonly]

[Internally when dataBinding generates bindingImplementation for your xml, it parses your package name to identify the class, if the package name begins with capital it is not able to separate the Class name from the package name, and it throws an error.]

Solution 3

Had the same issue, fixed it by changing build features in the build.gradle module from viewBinding to dataBinding

buildFeatures {
    dataBinding = true
}
Share:
32,063

Related videos on Youtube

Alen
Author by

Alen

Updated on July 09, 2022

Comments

  • Alen
    Alen almost 2 years

    How can I solve this problem. I can't make this data binding work, I have tried everything. Build.gradle(module app)

        apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    apply plugin: 'kotlin-kapt'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.fusion.alen.ask"
            minSdkVersion 16
            targetSdkVersion 27
            multiDexEnabled true
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            vectorDrawables.useSupportLibrary = true
        }
        androidExtensions {
            experimental = true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        dataBinding {
            enabled = true
        }
    
    }
    
    dependencies {
        implementation 'com.android.support:multidex:1.0.3'
    
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support:animated-vector-drawable:27.1.1'
        implementation 'com.android.support:support-vector-drawable:27.1.1'
        implementation 'com.android.support:customtabs:27.1.1'
        implementation 'com.android.support:cardview-v7:27.1.1'
        implementation 'com.android.support:design:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        implementation 'com.android.support:recyclerview-v7:27.1.1'
    
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }
    
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'kotlin-android-extensions'
    repositories {
        mavenCentral()
    }
    

    I tried adding kapt "com.android.databinding:compiler:$compiler_version" but it gives me an error. Build.gradle(Module project)

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
        ext{
            kotlin_version = '1.2.71'
            compiler_version = '3.2.1'
        }
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.2.1'
    
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
            classpath 'com.google.gms:google-services:4.2.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    

    This is my profile_fragment.xml, I have followed documentation instructions

    <layout xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
            <variable
                name="user"
                type="com.alen.ask.UserModel.User" />
        </data>
    
        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:layout_editor_absoluteY="25dp">
    
    
            <LinearLayout
                android:id="@+id/profile_box"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:background="@color/primaryColor"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/app_bar">
    
                <LinearLayout
                    android:id="@+id/qff_box"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_weight="5"
                    android:orientation="horizontal"
                    android:baselineAligned="false">
    
    
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:orientation="vertical">
    
                        <TextView
                            android:id="@+id/questions_number"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="18sp"
                            android:textStyle="bold"
                            **android:text="@{user.questionsNum}"************
                            tools:text="0" />
    
                    </LinearLayout>
    
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:orientation="vertical">
    
                        <TextView
                            android:id="@+id/followers_number"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="18sp"
                            android:textStyle="bold"
                            **android:text="@{user.followersNum}"************
                            tools:text="0" />
    
                    </LinearLayout>
    
                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:orientation="vertical">
    
                        <TextView
                            android:id="@+id/following_number"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
                            android:textSize="18sp"
                            android:textStyle="bold"
                            **android:text="@{user.followingNum}"***********
                            tools:text="0" />
    
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/app_bar"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:background="@color/primaryDarkColor"
                android:orientation="horizontal"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">
    
                <TextView
                    android:id="@+id/username_text"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="8dp"
                    android:layout_weight="1"
                    **android:text="@{user.name}"**
                    android:textColor="@color/primaryTextColor"
                    android:textSize="18sp"
                    android:layout_marginStart="8dp" />
            </LinearLayout>
    
        </android.support.constraint.ConstraintLayout>
    
    </layout>
    

    My User data class:

    data class User(val name: String,
                    val email: String,
                    val uid: String,
                    val photo: String,
                    val postsList: ArrayList<String> = ArrayList(),
                    val questionsNum: Int = 0,
                    val followersNum: Int = 0,
                    val followingNum: Int = 0
                    ) 
    

    This is inside ProfileFragmen class, in onCreateView method

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            val binding = ProfileFragmentBinding.inflate(inflater, container, false)
            binding.user = user
    }
    

    That line binding.user = user gives me error: Cannot access class 'UserModel.User'. Check your module classpath for missing or conflicting dependencies How can I solve this, I have followed instructions from DataBinding documentation and I don't think I have made any mistake. I have tried cleaning and rebuilding the project, but it didn't work. I have tried adding those 'kapt' dependencies, didn't work.... File->ProjectStructure->Gradle version: 4.10.1, AndroidPluginVersion: 3.2.1, KotlinLanguageVersion: 1.2, KotlinPluginVersion: 1.2.71-release-Studio3.2-1

    Thank you.

  • Alen
    Alen about 5 years
    My User data class is inside UserModel folder so removing it doesn't work
  • Karlom
    Karlom about 5 years
    Please notice suggestions should not be posted as answer.
  • Nguyễn Quang Tuấn
    Nguyễn Quang Tuấn over 3 years
    it's ok. i dont think problem like that :D. thanks
  • sophin
    sophin over 3 years
    I was checking on dependencies and did invalidate cache and restart. Thanks for this
  • Vishva Vijay
    Vishva Vijay almost 3 years
    I also had same issue, It was a problem because I had First letter of my package name in Caps, I changed it to small nd it works. THanks