Android数据绑定支持最酷的特性之一是,它还为设置了it的View生成字段。这会整理代码库,因为不需要字段或findViewById()
调用。
但问题是,绑定实例只能通过倾向于调度绑定的bind()
调用来检索。当异步接收数据时,这是不好的,通常会抛出NullPointerException
。
是否可以在没有实际数据绑定过程的情况下检索具有View字段的绑定实例?
堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at com.app.android.databinding.ActivityRestaurantDetailsBinding.executeBindings(ActivityRestaurantDetailsBinding.java:381)
at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:350)
at android.databinding.ViewDataBinding$6.run(ViewDataBinding.java:167)
at android.databinding.ViewDataBinding$5.onViewAttachedToWindow(ViewDataBinding.java:137)
at android.view.View.dispatchAttachedToWindow(View.java:14525)
发布于 2016-03-05 03:58:06
这似乎没有意义,数据绑定将忽略null变量,因此不应该抛出null指针,我相信这是它最重要的特性之一。如果你需要在异步调用之后修改变量,你可以直接使用dataBinding.executePendingBindings()
来自the docs
生成的绑定类将为每个描述的变量提供一个setter和getter。在调用setter之前,变量将采用默认的Java值--引用类型为null,int为0,boolean为false,依此类推。
和
生成的数据绑定代码自动检查null并避免null指针异常。例如,在表达式@{ user.name }中,如果user为null,则将为user.name分配其默认值(null)。如果您引用的是user.age,其中age是一个整数,那么它将缺省为0。
发布于 2019-01-23 11:20:23
java.lang.Boolean
也遇到了同样的问题。通过使用原语boolean
类型解决。
<variable
name="var"
type="boolean" />
https://stackoverflow.com/questions/35809743
复制相似问题