2016-09-04 6 views
1

Firebaseデータベースに数字と呼ばれる子があります。私のコードでFirebaseを使用してArrayListに要素を追加できません

child numbers

OnDataChangeの()メソッド、listNumber.size()の戻り4.内部の場合、私は理解していない。しかしlistNumber.sizeのOnDataChangeの外()値()の戻り0

my code:

+2

コードを画像として投稿しないで、代わりに書式設定されたテキストとして投稿してください。 – SurvivalMachine

+0

基本的には、その最終行をFirebaseコールの上に移動すると同じ結果になります。非同期コードの仕組みを理解し、理解するのに最適 –

答えて

3

OnDataChangeのはFirebaseがデータを返した後、それが呼ばれ、それはすぐに呼ばれていない、リスナーです。

  1. Firebaseにリクエストを作成し、あなたがリスナーを追加します。

    ので、実行順序は次のようになります。データが存在しません。

  2. が要求した後にコードを実行する(//result = 0
  3. Firebaseはデータを返したので、あなたのリスナーが(//result = 4)と呼ばれている
1

これは非同期プログラミングです。 Firebaseはそのメソッドを非同期に実行します。サーバからのデータの取得に時間がかかることがあるため、データを待機しません。したがって、onDataChangedメソッドの外で変数を呼び出すときには、値が割り当てられません。 したがって、nullを保持します。

このステートメントは、onDataChangedメソッドに渡すことができます。 setterメソッドとgetterメソッドを使用してモデルクラスを作成することもできます。 onDataChanged内でモデルクラスのセッターを呼び出して変数の値を設定し、onDataChangedの後にgetterメソッドを呼び出して値を戻します。

関連する問題