2016-03-05 63 views
5

Android数据绑定支持最酷的功能之一是它也为ID设置的视图生成字段。这整理了代码库,因为没有字段或调用是必要的。Android懒惰数据绑定可能吗?

但问题是绑定实例只能通过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) 

回答

3

这似乎没有什么意义,数据绑定会忽略空变量因此,没有空指针应该被抛出,那就是,我认为,其最提倡的特点之一。如果您需要异步调用等后,修改变量,你可以只使用dataBinding.executePendingBindings()

the docs

所产生的绑定类将有一个setter和getter每个所描述的变量。变量将采取默认的Java值,直到调用setter时 - 空引用类型,0对于int,假布尔等

生成的数据绑定代码自动检查空并避免空指针异常。例如,在表达式@ {user.name}中,如果用户为空,那么user.name将被分配其默认值(空)。如果你参考user.age,年龄是一个整数,那么它将默认为0.

+0

我也有同样的想法。在检查生成的代码时,有许多空的检查,但对于这种布尔类型来说并非如此。这听起来像一个错误? – razzledazzle

+0

具有相同的 'android:text =“@ {DateFormatter.format(item.orderDate)}”'。这导致调用'DateFormatter.format(null)'的NPE原因。 – drindt

+1

过去几个月使用过数据绑定后,似乎仍然有很多空检查问题,这是非常令人失望的。其中最突出的原因是布拉格类型@razzledazzle说 –