私はビルドしているアプリを持っています。firebaseのユーザーにリストを追加するにはどうしたらいいですか?
今のところ、データベースは次のようになります。
は、私は(彼らが最初にログインするとき)のユーザのそれぞれに別のフィールド名「友人」を追加し、そこにリストを保持します。 どうすればいいですか?私はそれがこのようになりたい
:「ユーザー」の最初の子を想定し
私はビルドしているアプリを持っています。firebaseのユーザーにリストを追加するにはどうしたらいいですか?
今のところ、データベースは次のようになります。
は、私は(彼らが最初にログインするとき)のユーザのそれぞれに別のフィールド名「友人」を追加し、そこにリストを保持します。 どうすればいいですか?私はそれがこのようになりたい
:「ユーザー」の最初の子を想定し
がユーザ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
の読み取りドキュメント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<>
を使用することによってそれを行う、私はリストを格納する必要がある場合、それは通常、あなたにこのコード
を助けるべきだと思います。 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());
}
});
こんにちは、最後の行で私にエラーが発生します。それは、シンボルgetUidを解決できないと言います。そして、もしそれをgetUid()に変更すると、互換性のないタイプと言われます。 必須:..... databeserefernce見つかった:..... tasks.Task – Daniel
申し訳ありませんgetUid() –
データベースを取る前に、参照。上記のコードは動作する必要があります。 –