Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 701
Alen Avatar asked Feb 07 '19 11:02

Alen


2 Answers

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.

like image 165
Zach Sao Avatar answered Oct 04 '22 01:10

Zach Sao


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.]

like image 39
Velu Avatar answered Oct 04 '22 00:10

Velu