2016-03-05 10 views
5

Androidデータバインディングサポートの最もクールな機能の1つは、View with IDのフィールドを生成することです。これはフィールドがないか、findViewById()呼び出しが必要であるため、コードベースを整理します。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

、データバインディングは、このようにヌルポインタがその最も推進機能の一つ、つまり、私は信じて、投げてはならないヌル変数を無視します。あなたがなどの非同期呼び出しの後に変数を変更する必要がある場合は、あなただけのthe docs

からdataBinding.executePendingBindings()

を使用することができます生成されたバインディング・クラスを説明変数ごとに、セッターとゲッターを持つことになります。セッターが呼び出されるまでの変数がデフォルトのJavaの値を取ります - nullのコードを結合などの参照型、int型のために0、ブールのための偽のため

生成されたデータを自動的にヌルをチェックヌルポインタ例外を回避します。たとえば、@ {user.name}という式でuserがnullの場合、user.nameにはデフォルト値(null)が割り当てられます。 user.ageを参照していて、年齢がintの場合、デフォルトは0になります。

+0

私は同じことも期待していました。生成されたコードをチェックすると、ヌルチェックが多数行われていましたが、このブール型では正しくありませんでした。これはバグのようですか? – razzledazzle

+0

'android:text =" @ {DateFormatter.format(item.orderDate)} "の場合は同じです。これにより、NPEが 'DateFormatter.format(null)'を呼び出す原因になります。 – drindt

+1

過去数ヶ月にわたりデータバインディングを使用した後、ヌルチェックにはまだ多くの問題が残っていますが、これは非常に残念です。 @razzledazzleが言ったようにブール型である最も顕著な原因は –

関連する問題