web-dev-qa-db-fra.com

Kotlin-DataBinding-Error: vérifiez le chemin de classe de votre module pour les dépendances manquantes ou conflictuelles

Comment puis-je résoudre ce problème. Je ne peux pas faire fonctionner cette liaison de données, j'ai tout essayé. Build.gradle (module d'application)

    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()
}

J'ai essayé d'ajouter kapt "com.Android.databinding: compiler: $ compiler_version" mais cela me donne une erreur. Build.gradle (projet de module)

// 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()
    }
}

Ceci est mon profile_fragment.xml, j'ai suivi les instructions de documentation

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

Ma classe de données utilisateur:

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
                ) 

C'est à l'intérieur de la classe ProfileFragmen, dans la méthode onCreateView

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

Cette ligne binding.user = user me donne une erreur: Impossible d'accéder à la classe 'UserModel.User'. Vérifiez le chemin de classe de votre module pour les dépendances manquantes ou conflictuelles Comment puis-je résoudre ce problème, j'ai suivi les instructions de la documentation DataBinding et Je ne pense pas avoir commis d'erreur. J'ai essayé de nettoyer et de reconstruire le projet, mais cela n'a pas fonctionné. J'ai essayé d'ajouter ces dépendances 'kapt', ça n'a pas fonctionné ... Fichier-> ProjectStructure-> Version Gradle: 4.10.1, AndroidPluginVersion: 3.2.1, KotlinLanguageVersion: 1.2, KotlinPluginVersion: 1.2.71-release-Studio3 .2-1

Je vous remercie.

4
Alen

Renommez votre dossier UserModel en userModel puis nettoyez/reconstruisez votre projet. J'ai eu le même problème et l'erreur a disparu lorsque j'ai défini la première lettre de mon dossier en minuscules. À l'avenir, utilisez camelCase pour le nom de vos dossiers, tout comme pour les variables. Les majuscules sur la première lettre correspondent généralement aux cours.

14
Zach Sao

La raison en est que l'un des noms de vos packages commence par Capital.

Le nom de classe qui utilise la liaison de données doit commencer par majuscule, et nom du package doit commencer par minuscule. [Ce n'est pas seulement pour la liaison de données, c'est la convention suivie couramment]

[En interne, lorsque dataBinding génère bindingImplementation pour votre xml, il analyse le nom de votre package pour identifier la classe, si le nom du package commence par des majuscules, il ne peut pas séparer le nom de la classe du nom du package et génère une erreur.]

6
Velu
<data class="ProfileBinding">
    <variable
        name="user"
        type="com.alen.ask.UserModel.User" />
</data>

utiliser la classe ProfileBinding mentionnée ci-dessus dans la classe Fragment pour gonfler

1
Abraham Mathew

Essayez d'utiliser la méthode binding.setVariable.

0
Sergio Ocampo

Au fichier profile_fragment.xml essayez de le remplacer

<data>
    <variable
        name="user"
        type="com.alen.ask.UserModel.User" />
</data>

avec ça

<data>
    <variable
        name="user"
        type="com.alen.ask.User" />
</data>

et faites-nous part de vos commentaires.

0
LiTTle