Android数据绑定:缺少DataBinderMapper类

Rag*_*har 4 data-binding android

java.lang.NoClassDefFoundError: android.databinding.DataBinderMapper
        at android.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:31)
        at com.example.MainActivity.onCreate(MainActivity.java:13)
        at android.app.Activity.performCreate(Activity.java:5231)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我希望这是一个错误,有人遇到类似的问题吗?我解压缩classes.jarexploded-arr文件夹,但是找不到DataBinderMapper课程。

任何解决方法/修复将不胜感激。

mad*_*527 9

确保所有使用DataBinding的模块都已启用它。这就是我得到该例外的原因。

android {
....
dataBinding {
    enabled = true
}
}
Run Code Online (Sandbox Code Playgroud)

  • 真的行。就我而言,我只为“ feature-home”模块启用了dataBinding,但也忘记了在“ app”模块中启用了它。这就是为什么我看到这种情况。将dataBinding也添加到`app`模块之后,它也将按预期工作。 (4认同)
  • 让我开始悬赏并奖励这个答案。tl;dr - 如果某些“模块”使用数据绑定,但应用程序(“app”)模块没有 - 它在任何地方都无法工作。所以“module”让你的“app”也使用它。 (3认同)

Kav*_*han 1

您应该在 build.gradle 中包含 android-apt 插件才能生成该类android.databinding.DataBinderMapper

在您的项目 build.gradle 中:

dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
        classpath 'com.android.databinding:dataBinder:1.0-rc2'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
//.... more
}
Run Code Online (Sandbox Code Playgroud)

在每个模块的build.gradle中:

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'
Run Code Online (Sandbox Code Playgroud)

更多信息