数据绑定失败并显示“无法猜测”

时间:2018-09-24 23:13:50

标签: android android-gradle android-databinding androidx android-studio-3.2

自从Android Studio 3.2.0更新以来,我面临以下问题:

  

任务':mobile:dataBindingGenBaseClassesDebug'的执行失败。

     

>无法猜测com.ACME.database.model.Order

还看到了这个answer,它暗示“软件包名称必须以小写字母开头”。

...看起来很像,似乎是此variable分配的原因:

<data class=".databinding.OrderFragmentBinding">
    <variable name="order" type="com.ACME.database.model.Order"/>
    ...
</data>

找到:New data binding compiler for binding classes,它不能解释行为的变化。

:这样的分配也受该命名约定影响吗?我的意思是,有什么机会(除了更改大写的包名之外)使数据绑定v2“猜测”生效?

10 个答案:

答案 0 :(得分:8)

gradle.properties中的这些设置确实启用了androidx数据绑定编译器:

android.databinding.enableV2 = false
android.enableExperimentalFeatureDatabinding = true

通过所获取的软件包可以看到这一点:

Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.pom
Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.jar

它抱怨:

WARNING: The option setting 'android.databinding.enableV2=false' is experimental and unsupported.
The current default is 'true'

WARNING: The option setting 'android.enableExperimentalFeatureDatabinding=true' is experimental and unsupported.
The current default is 'false'

最有可能需要androidx.fragment.app.Fragment而不是android.support.v4.app.Fragment,以便将Fragment与默认的v2数据绑定编译器进行数据绑定。这只是一个临时解决方案-但仍比还原到v1数据绑定编译器更好。

答案 1 :(得分:4)

这是因为使用数据绑定的类名或包名。这些使用数据绑定的类必须以大写字母开头,而包以小写字母开头。

答案 2 :(得分:4)

遇到此错误的情况:

<data>
    <variable
        name="something"
        type=""/>
</data>

空类型或未定义类型

答案 3 :(得分:3)

更新到3.2之后(在迁移之前可以正常工作的应用程序,并且没有代码更改)后,我也发生了同样的事情……那么即使我在软件包名称的首字母中确实使用小写字母,也会出现这个“猜测”问题! >

<data>
   ...
   <variable name="rule" type="com.gta.viewmodels.vmRule"/>
   ...
</data>

因此,即使您更新了程序包名称,我也仍然“猜测”您的问题仍然存在(无论如何,这是最佳做法,因为每次升级Android Studio时问题都会出现在每一个问题上!)。

无论如何,我通过在 gradle.properties 中降级v2数据绑定来解决(您会收到“不支持”的警告,但可以忽略它):

android.databinding.enableV2=false

看起来Android Studio PG尚未对此断言(here)进行很好的测试:

Data Binding V2 is now enabled by default and is compatible with V1.

答案 4 :(得分:1)

有类似的问题。通过以大写字母开头重命名数据类来解决。

答案 5 :(得分:1)

我遇到了这个问题,因为 1.我的viewmodel类未从BaseObservable扩展

  1. 我的包裹名称以大写字母开头

答案 6 :(得分:1)

如果以上方法均无效,请检查您引用的类类型是在同一模块中还是在xml所依赖的模块中。

答案 7 :(得分:1)

就我而言,这只是类型变量XML文件中的错误路径

<data>
        <variable
            name="clickListener"
            type="com.example.liberdade.caixa.CaixaListener" />

答案 8 :(得分:0)

我收到此错误,并通过将clickhandler类名称的首字母更改为大写字母来解决 我对此进行了更改: clickHandler 为此: ClickHandler com.packagename.android.activity.AddAddressActivity。 ClickHandler

答案 9 :(得分:0)

我的情况是我使用小字母的类名 (propertyModel) 应该是 (PropertyModel)