2017-09-04 31 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()); 
    } 
});