我在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)
似乎数据绑定整体被破坏了。
之前我进行了重构,并在包之间移动了类。
答案 0 :(得分:25)
就我而言,在重命名和在包之间移动类时,我依赖Android Studio。但是它没有对布局的XML进行修正,其中type
中variable
元素的data
属性中的重构类的引用。
所以我之前的类型值指向不存在的文件并构建崩溃。
这是一个简单的错误,但可能需要更多时间才能找到来源。希望这会对某人有所帮助。
答案 1 :(得分:6)
对我来说,这是在将Android Studio更新到版本3.5.2之后开始的事情
要解决此问题,我将Android Gradle Plugin
降级了
buildscript {
repositories {
//..........
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
//......
}
}
答案 2 :(得分:4)
确保您导入在XML绑定中引用的所有类
我有类似的代码:
android:visible="@{obj instanceof A}"
我遇到了同样的错误。
结果证明,类A
并不是最上面的。添加<import type="com.company.A">
标签可以解决此问题。
P.S。 android:visible是我拥有的自定义绑定适配器。
答案 3 :(得分:1)
您从xml文件引用的任何实例的 getter函数 可能尚未定义,或者getter函数可能没有 public < / em> 访问说明符。
答案 4 :(得分:1)
在迁移到Android X后,您可能已经偶然发现了这个问题。如果是这种情况,并且您肯定XML文件可以,但是仍然无法正常工作,则应该开始查看生成代码的库。
Jettifyer无法轻松转换生成代码的库。这里的一些信息-https://blog.danlew.net/2018/11/14/the-reality-of-migrating-to-androidx/
就我而言,我更新了明显的内容,但仍然缺少某些内容。因此,我要做的是进入我的开发分支(不是Android X),运行一个构建,然后挖入build文件夹以查看所有生成代码的库。一旦这样做,我就可以逐个查看可疑对象,直到找到导致此问题的依赖项。您可以更新它,或者就我而言,将其删除,此错误已得到解决。 :)
答案 5 :(得分:1)
将Android Gradle插件降级为3.5.1为我解决了该问题
答案 6 :(得分:0)
当我定义这样的变量时,我遇到了这个问题(Android Studio没有警告任何东西)
<data>
<variable
name="onGlobalLayoutA"
type="ViewTreeObserver.OnGlobalLayoutListener"/>
<import type="android.view.ViewTreeObserver"/>
</data>
我解决它
<data>
<variable
name="onGlobalLayoutA"
type="android.view.ViewTreeObserver.OnGlobalLayoutListener"/>
</data>
希望这会对某人有所帮助。
答案 7 :(得分:0)
在我的情况下,原因是我为变量使用了一个类型,该变量是另一个模块,并且该模块在构建脚本中作为“实现”添加。更改为“ api”即可解决该问题。
与atlascoder发布的问题显然不一样,但是我提到不管,也许有人将这篇文章与我遇到的问题混在一起。
答案 8 :(得分:0)
在我的情况下,我的问题是在LongClickListener
中,此侦听器的方法必须返回了boolean
,但是我的方法返回了void
,所以当我添加正确的return语句时,它可以工作很好。
请记住,如果使用数据绑定方法,则必须返回正确的值,否则抛出的错误根本没有帮助。
答案 9 :(得分:0)
正如@ hiddeneyes02所述,这是从Android Gradle插件从3.5.1升级到3.5.2时开始发生的,这似乎是一个错误: https://issuetracker.google.com/issues/143778134
当我使用命令工具构建项目时,出现了与本文相同的错误: When building Android project with Android Gradle Plugin v. 3.5.2 my builds fail
答案 10 :(得分:0)
如果此问题仍然有意义。对我来说,我发现在我的xml布局文件中,我将一个类(而不是一个实例)作为变量包括在内,即我拥有此代码
<variable
name="Converters"
type="com.example.flexapp.utils.Converters" />
它应该是
<import type="com.example.flexapp.utils.Converters"/>
因为这是一个类,而不是对象。