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

“可能的原因”;错误:无法生成视图绑定器java.lang.NullPointerException“;,java,android,data-binding,nullpointerexception,android-databinding,Java,Android,Data Binding,Nullpointerexception,Android Databinding,我正在使用Android Studio进行我的Android项目。当构建使用奇怪的stacktrace崩溃时,我遇到了一个问题,如下所示: Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'. java.lang.RuntimeException: failure, see logs for details. cannot generate view binders java.lang.NullPointe

我正在使用Android Studio进行我的Android项目。当构建使用奇怪的stacktrace崩溃时,我遇到了一个问题,如下所示:

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)
数据绑定似乎整体上被破坏了


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

在我的例子中,我依赖Android Studio在包之间重命名和移动类。但它没有对布局的XML进行更正,这些布局在
数据
变量
元素的
类型
属性中引用了重构类

所以我以前的类型的值指向不存在的文件,构建崩溃了


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

从xml文件中引用的任何实例的getter函数可能没有定义,或者getter函数可能没有public访问说明符。

我在定义这样的变量时会遇到这个问题(Android Studio没有任何警告)


然后我通过

<data>
    <variable
        name="onGlobalLayoutA"
        type="android.view.ViewTreeObserver.OnGlobalLayoutListener"/>
</data>


希望这能对其他人有所帮助。

在我的例子中,原因是我使用了另一个模块的变量类型,该模块作为“实现”添加到构建脚本中。更改为“api”解决了该问题


显然与atlascoder发布的问题不一样,但无论如何,我要提到的是,可能有人在本文中遇到了与我相同的问题。

请确保导入xml绑定中引用的所有类。

我的代码是这样的:

android:visible="@{obj instanceof A}"
我也犯了同样的错误

原来类
A
不是在顶部导入的。添加
标记解决了问题


安卓:visible是我拥有的一个自定义绑定适配器。

在迁移到安卓X后,您可能偶然发现了这个问题。如果是这样,并且您肯定您的XML文件没有问题,但它仍然不起作用,那么您应该开始查看生成代码的库

生成代码的库不能由Jettifier轻松转换。这里有一些信息-


在我的例子中,我更新了那些明显的,但我仍然遗漏了一些东西。所以,我所做的是进入我的开发分支(那不是AndroidX),运行一个构建,然后深入构建文件夹查看生成代码的所有库。一旦我这样做了,我就能够一个接一个地查看嫌疑犯,直到我找到了导致这个问题的依赖关系。您可以更新它,或者在我的情况下删除它,此错误已解决。:)

在我的例子中,我的问题是在一个
longclicklister
中,该侦听器的方法必须返回一个
boolean
,但我的方法返回了
void
,因此当我添加正确的return语句时,它工作得很好


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

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

为了修复它,我降级了Android Gradle插件

buildscript {

    repositories {
        //..........
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        //......
    }
}

正如@hiddeneyes02所提到的,这是从Android Gradle插件从3.5.1升级到3.5.2时开始发生的,这似乎是错误:

当我使用命令工具构建项目时,我得到了与本文相同的错误:

将Android Gradle插件降级到3.5.1,修复了我的问题

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

<variable
      name="Converters"
      type="com.example.flexapp.utils.Converters" />

应该是这样的

<import type="com.example.flexapp.utils.Converters"/>


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

我正在处理同一个问题。就我而言,我认为这是因为有一个内部类,但我{我不确定。我做了几次更改,但日志中完全没有任何线索。我为此浪费了将近一个小时。我希望Android studio能够显示数据绑定问题上的实际错误。你有没有办法修改编译器错误来告诉你是什么文件做的?还是猜测太多?@AdamMc331是的,我没有试着这么做。打开布局文件很容易,看到lint标记了错误的标记。我花了整整一个晚上的时间试着把我移动的类和包恢复到错误发生前的位置……然后砰的一声,我看到这个n更正了我的代码n viola!!成功了!嗨,你可以添加一个更具体的答案,比如如何降级或l请在3.5.2中解释为什么会发生这种情况,谢谢您的参与。对于我来说,在发现生成的代码/生成的内容仍在缓存支持库之后,我也是这样。通过运行
清理
无效+重新启动
,删除
。gradle
缓存和生成目录解决了我的问题,还提供了
jetifier.blacklist
如果我们不想为特定的libs升级到AndroidX,
<import type="com.example.flexapp.utils.Converters"/>