2017-09-20 106 views
0

我正在嘗試製作事件分類器應用程序。我試圖從數據庫中獲取朋友arraylist,並在數據庫中的每個朋友值下添加event_key。Android- Firebase如何在每個ArrayList值下分配一個子值?

final ArrayList<String> friends= new ArrayList<String>(); 
hello.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
        friends.add(String.valueOf(dsp.getKey())); 
       } 

       mDatabaseUserEvents.child(invited_list).child(event_key).setValue(true); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

但是,我得到一個錯誤,指出ArrayList不兼容。

數據庫結構我想瞄準的是:

Events: 
     -User1: 
       -event_key:true 
     -User2: 
       -event_key:true 

我敢肯定我需要使用一個for循環,但困惑於如何實現它。謝謝!

回答

1

因爲Firebase是一個NoSQL數據庫,它的結構是成對的鍵和值。所以每個孩子都是Map而不是ArrayList。的確,您可以從數據庫獲取值並存儲到ArrayList中,但與您的方式不同,因爲onDataChange()方法的異步行爲,您的friends ArrayList將始終爲空。發生這種情況是因爲在您嘗試將這些值添加到該ArrayList之前調用了onDataChange()方法。

如果你想設置true所有event_key coresponding給每個用戶,並假設Events節點是火力地堡數據庫的直接孩子,請使用如下代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference eventsRef = rootRef.child("Events"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String userKey = ds.getKey(); 
      Log.d("TAG", userKey); 
      eventsRef.child(userKey).child("event_key").setValue(true); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
eventsRef.addListenerForSingleValueEvent(eventListener); 
+0

真棒!謝謝! – Spotz

相關問題