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

firebase Here

+0

こんにちは、最後の行で私にエラーが発生します。それは、シンボルgetUidを解決できないと言います。そして、もしそれをgetUid()に変更すると、互換性のないタイプと言われます。 必須:..... databeserefernce見つかった:..... tasks.Task – Daniel

+0

申し訳ありませんgetUid() –

+0

データベースを取る前に、参照。上記のコードは動作する必要があります。 –

0

の読み取りドキュメントGETUIDがtrobuleを取得している場合は、それがnullでない場合、またはデータベース内等しいかどうかを確認してみてください。正しい場合は、それをプライベート文字列に変換し、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) { 

        } 

は私がjava.utilからList<>を使用することによってそれを行う、私はリストを格納する必要がある場合、それは通常、あなたにこのコード

0

を助けるべきだと思います。 GenericTypeIndicatorという名前を使用すると、カスタムJavaオブジェクトを直接入力して自動的にFirebaseデータベースにシリアライズすることができます。

「友人」リストが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()); 
    } 
}); 
関連する問題