【问题标题】:data binding not getting "Identifiers must have user defined types from the XML file" error数据绑定未获得“标识符必须具有 XML 文件中的用户定义类型”错误
【发布时间】:2018-09-21 07:23:48
【问题描述】:

我正在学习 android 数据绑定。我面临的问题是,如果出现与我当前设置的数据绑定相关的错误,我会收到非常一般的错误消息,这些错误消息不提供确切发生的事情和地点的线索,而不是某些主题中提到的非常具体的错误消息关于数据绑定 (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。

这是我的 build.gradle

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

任何想法我在这里缺少什么?

【问题讨论】:

  • movie.release_date 是字符串吗?也许它很困惑,因为您将文本作为字符串引用(@string/empty_date)和字符串对象(movie.release_date)。如果是这样的话,我也希望有更精确的异常日志。

标签: android data-binding


【解决方案1】:

这是我的,工作正常,给出适当的错误,没有太大的区别。试试这个...

应用级 build.gradle

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

项目级 build.gradle

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

【讨论】:

  • 差异很小。我已经尝试应用它们,但没有运气。
  • 没有。问题是我遇到了一般错误,这些错误既不指向问题本身,也不指向有问题的代码,而不是特定的。上述问题中解释了详细信息。
  • 好的好的,我明白了,我在开始绑定时遇到了这个问题,检查我的这个答案,我在那里解释过,stackoverflow.com/a/51579759/6891563
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 2019-09-19
  • 2016-12-06
  • 2019-07-15
  • 1970-01-01
相关资源
最近更新 更多