2017-09-04 63 views
0

我有一個應用程序,我正在建設。如何向Firebase中的用戶添加列表?

現在數據庫看起來像這樣。

Right now the database looks like this.

我要添加到每個用戶(當他們第一次登錄)另一場名爲「朋友」,並在那裏舉行的列表。 我該怎麼辦?

我希望它是這樣的:

enter image description here

回答

0

假設「用戶」的第一個孩子是用戶ID。

您可以像這樣添加「朋友」的孩子。

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("users").child(currentFirebaseUser.getUid()).child("friends").setValue("your First Friend"); 

之後,你在這個孩子這樣的實現這些方法。

myRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
        // This method is called once with the initial value and again 
        // whenever data at this location is updated. 
        String value = dataSnapshot.getValue(String.class); 
        Log.d(TAG, "Value is: " + value); 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
        // Failed to read value 
        Log.w(TAG, "Failed to read value.", error.toException()); 
    } 
}); 

的火力Here

+0

嗨,最後一行給我一個錯誤。它說無法解析符號getUid。如果我將它改爲getUid()它表示不兼容類型 必需:..... databeserefernce找到:.....任務。任務 – Daniel

+0

對不起,它的getUid() –

+0

檢查當前用戶是否爲空或沒有采取數據庫參考。以上代碼必須工作。 –

0

閱讀文檔如果的getuid越來越trobule,嘗試看看,如果它不爲空,或者是在數據庫等。如果正確,則將其轉換爲私有字符串並放入DatabaseReference中。

String userKey = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("users").child(userKey).child("friends").addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       String value = datasnapshot.getValue(String.class); 
     //verifiy if has something in the friendList and put value if has 
      if(value != null) { 
       myRef.setValue("My new FRRIIIEEEND); 
} 

}; 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 

        } 

,我認爲它應該幫助你這段代碼

0

通常當我需要存儲一個名單,我使用List<>java.util做到這一點。如果您使用名爲GenericTypeIndicator的東西,則可以直接輸入要自動序列化到Firebase數據庫的自定義Java對象。

假設您的「朋友」列表是User對象的集合。我會做這樣的事情:

DatabaseReference myRef = database.getReference("users").child(currentFirebaseUser.getUid()).child("friends"); 
myRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     GenericTypeIndicator<List<User>> genericTypeIndicator =new GenericTypeIndicator<List<User>>(){}; 
     List<User> friends = dataSnapshot.getValue(genericTypeIndicator); 
     // Check if friends list exists 
     if(friends == null){ 
      // Create list 
      friends = new ArrayList<User>(); 
     } 
     // Add new user 
     friends.add(youUserHere); 

     // Set updated friends list 
     database.getReference("users").child(currentFirebaseUser.getUid()).child("friends").setValue(friends); 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
     // Failed to read value 
     Log.w(TAG, "Failed to read value.", error.toException()); 
    } 
});