2017-01-15 10 views
1

Firebaseデータベース内の各子からいくつかの値を読み込み、それを配列リストに保存しようとしています。AndroidのFirebaseデータベースから複数の値を読み取る

まず、外部変数を作成して、どの方法でもアクセスできるようにしました。 onCreateメソッドに続いて

ArrayList<LatLng> latlngs = new ArrayList<>(); 

、私がこの

mLocationDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
       LocationCurrent post = dsp.getValue(LocationCurrent.class); 
       Double latitude = Double.parseDouble(post.getLatitude()); 
       Double longitude = Double.parseDouble(post.getLongitude()); 
       currentLocationLatLng = new LatLng(latitude, longitude); 
       latlngs.add(currentLocationLatLng); 

       Log.i("LAT LONGS IN", String.valueOf(latlngs)); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

ログが正常に動作しなかった、私はすべてのLatLongブログの値を見ることを得ます。しかし、同じログをonCreateの中で呼び出すと、上記のメソッド呼び出しの外で空の配列が得られます。

Log.i("LAT LONGS OUT", String.valueOf(latlngs)); 

何が問題なのですか?これにはどのような解決策がありますか?

答えて

0

addListenerForSingleValueEventを使用する場合、onDataChangeコールバックは将来、非同期で呼び出されます。次の行の直後に何かを記録しようとすると、onDataChangeコールバック内のコードはまだ実行されません。それは修正されていませんが、現時点では初期化されていませんでした。データを操作する場合は、onDataChangeコールバックが発生するまで待つようにしてください。

+0

ありがとうございます。私は多くの時間を費やしていますが、これは修正がないことを知るためだけです。では、私が得たデータをどうすればうまくいくのでしょうか? onDataChangeコールバックが起動するまで待つことはどういう意味ですか? –

+1

mLocationDatabaseReference.addListenerForSingleValueEvent(...)を呼び出すと、onDataChange(...)メソッド内のコードが将来実行されます。次の秒の意味か30秒の意味かもしれません。基本的に、firebaseから取得しているデータで行う必要があるものは、onDataChangeメソッドで行います。 –

関連する問題