"错误:无法生成视图绑定器java.lang.NullPointerException"的可能原因

atl*_*der 20 java data-binding android nullpointerexception android-databinding

我正在为我的Android项目使用Android Studio.当构建与奇怪的堆栈跟踪崩溃时,我遇到了一个问题,如下所示:

Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'.
 java.lang.RuntimeException: failure, see logs for details.
  cannot generate view binders java.lang.NullPointerException
    at android.databinding.tool.reflection.ModelMethod.isBoxingConversion(ModelMethod.java:155)
    at android.databinding.tool.store.SetterStore.isBetterParameter(SetterStore.java:946)
    at android.databinding.tool.store.SetterStore.getBestSetter(SetterStore.java:838)
Run Code Online (Sandbox Code Playgroud)

似乎数据绑定整体被破坏了.

我之前进行了重构,并在包之间移动了类.

atl*_*der 28

就我而言,在重命名和在包之间移动类时,我依赖Android Studio.但它没有对布局的XML进行校正,其中typevariable元素属性中的重构类进行了引用data.

所以我以前的类型的值指向非现有文件并构建崩溃.

这是一个简单的错误,但可能需要更多时间才能找到来源.希望这会对某人有所帮助.

  • 这个。因此,我浪费了将近一个小时。我希望Android Studio会显示有关数据绑定问题的实际错误。 (2认同)
  • @AdamMc331 不幸的是,我没有尝试这样做。打开布局文件并看到 lint 标记了错误的标记很容易 (2认同)

hid*_*s02 12

对我来说,这是在将 Android Studio 更新到 3.5.2 版本后开始发生的

为了修复它,我降级了 Android Gradle Plugin

buildscript {

    repositories {
        //..........
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        //......
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 9

如果这个问题仍然相关。对我来说,我认为在我的 xml 布局文件中,我包含一个类(而不是一个类的实例)作为变量,即我有这段代码

<variable
      name="Converters"
      type="com.example.flexapp.utils.Converters" />
Run Code Online (Sandbox Code Playgroud)

本来应该是

<import type="com.example.flexapp.utils.Converters"/>
Run Code Online (Sandbox Code Playgroud)

因为这是一个类而不是一个对象。


Dan*_*atz 8

确保导入您在xml绑定中引用的所有类

我有类似的代码:

android:visible="@{obj instanceof A}"
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的错误。

事实证明该类A不是最重要的。添加<import type="com.company.A">标签解决了该问题。

PS android:visible是我拥有的自定义绑定适配器。


pou*_*uya 6

在我的情况下,我的问题在LongClickListener于此侦听器的方法必须返回 aboolean但我的方法返回了void所以当我添加正确的 return 语句时它工作得很好。

请记住,如果您使用数据绑定方法,您必须返回正确的值,否则它抛出的错误根本没有帮助。