2016-08-25 11 views
0

Firebaseから値を取得してリストに追加しようとします。私は次のようにします:firebase onDataChangeでAndroidの関数がNULLを返すと、nullではないことを示します

ArrayList<Category> categoriesList; 

    public ArrayList<Category> getCategoryListFromFirebase() { 
     Firebase firebase = new Firebase(Constants.FIREBASE_URL).child("categories"); 
     categoriesList = new ArrayList<>(); 
     firebase.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot categories : dataSnapshot.getChildren()) { 
        Category cat = categories.getValue(Category.class); 
        categoriesList.add(cat); 
       } 
      } 
      @Override 
      public void onCancelled(FirebaseError firebaseError) { 
      } 
     }); 
     return categoriesList; 
    } 

戻り値はcategoriesList nullを返しますが、ループ内ではcategoriesListにオブジェクトを追加しています。

これはどのように解決できますか? ありがとう)

答えて

2

リスナーのコールバックは非同期で、すぐには起動せず、Firebaseサーバーからデータを取得する必要があります。投稿されたコードでは、ValueEventListenerの後に実行されるステートメントは、リストを構築するコールバックコードではなく、return categoriesListです。返されるリスト値には、まだ実行されていないため、onDataChange()コールバックの結果は含まれていません。

addValueEventListener()で登録されたリスナーはアクティブなままです。until it is removed。データを一度取得するには、addListenerForSingleValueEvent()

関連する問題