代码之家  ›  专栏  ›  技术社区  ›  AlexKost

数据绑定未获取“标识符必须具有XML文件中的用户定义类型”错误

  •  1
  • AlexKost  · 技术社区  · 6 年前

    我正在学习安卓数据绑定。我面临的问题是,如果我当前的设置中出现与数据绑定相关的错误,我会收到非常一般的错误消息,这些消息不提供确切发生了什么以及发生在哪里的线索,而不是数据绑定的一些主题中提到的非常具体的错误消息( for instance ).

    考虑以下布局:

    <?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"
        xmlns:tools="http://schemas.android.com/tools">
        <data>
            <!--<import type="android.view.View"/>-->
            <!--<import type="android.text.TextUtils"/>-->
            <variable
                name="movie"
                type="us.kostenko.architecturecomponentstmdb.details.model.Movie" />
        </data>
        <TextView
            <!-- ... -->
            android:text="@{TextUtils.isEmpty(movie.release_date) ? @string/empty_date : movie.release_date}"/>
    </layout>
    

    请注意,注释掉导入是为了触发错误。

    我希望得到 Identifiers must have user defined types from the XML file. TextUtils is missing it 错误但我犯的错误很普遍:

        org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptDebugKotlin'.
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: org.gradle.api.GradleException: Compilation error. See log for more details
        at org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:16)
        at org.jetbrains.kotlin.gradle.internal.KaptWithKotlincTask.compile(KaptWithKotlincTask.kt:79)
    

    我怀疑我的设置有问题。我正在使用Android studio 3.1.4。

    这是我的身材。格拉德尔

        apply plugin: 'com.android.application'
        apply plugin: 'kotlin-android'
        apply plugin: 'kotlin-kapt'
        apply plugin: 'kotlin-android-extensions'
        android {
        //...
            dataBinding { enabled = true }
        }
    
        dependencies {
            // ...
            kapt "com.android.databinding:compiler:3.1.4"
        }
    

    项目一级:

    buildscript {
    ext.kotlin_version = '1.2.70'
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
    

    你知道我这里缺少什么吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Khemraj Sharma    6 年前

    这里是我的,即工作正常,给出适当的误差,没有太大的差别。试试这个。。。

    应用程序级生成。格拉德尔

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-kapt'
    apply plugin: 'kotlin-android-extensions'
    android {
        compileSdkVersion 28
        defaultConfig {
            minSdkVersion 15
            targetSdkVersion 28
        }
        dataBinding {
            enabled = true
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }
    repositories {
        mavenCentral()
    }
    

    项目级构建。格拉德尔

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
        ext.kotlin_version = '1.2.70'
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            maven { url "https://jitpack.io" }
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }