2016-03-05 101 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說 –