7

Android 数据绑定支持最酷的功能之一是它还为设置了 ID 的 View 生成字段。这整理了代码库,因为不需要字段或findViewById()调用。

但问题是绑定实例只能通过bind()倾向于调度绑定的调用来检索。当异步接收数据并且通常NullPointerException会被抛出时,这很糟糕。

可以在减去实际数据绑定过程的情况下检索具有视图字段的绑定实例吗?

堆栈跟踪:

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)
4

2 回答 2

3

这似乎没有意义,数据绑定将忽略空变量,因此不应抛出空指针,我相信这是它最受推崇的特性之一。如果您需要在异步调用后修改变量等,您可以使用dataBinding.executePendingBindings()

文档

生成的绑定类将对每个描述的变量都有一个 setter 和 getter。在调用 setter 之前,变量将采用默认的 Java 值 — null 表示引用类型,0 表示 int,false 表示布尔值,等等。

生成的数据绑定代码会自动检查空值并避免空指针异常。例如,在表达式@{user.name} 中,如果 user 为 null,则 user.name 将被赋予其默认值 (null)。如果您引用 user.age,其中 age 是一个 int,那么它将默认为 0。

于 2016-03-05T03:58:05.810 回答
1

遇到了同样的问题java.lang.Boolean。通过使用原始boolean类型解决。

<variable
    name="var"
    type="boolean" />
于 2019-01-23T11:20:23.343 回答