これは、firebaseリアルタイムデータベースに新しい人を追加するための私のロジックです。ただし、新しいエントリを作成する代わりに、古いデータを新しいデータで更新するだけです。
buttonSave.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/*
new Firebase(Config.FIREBASE_URL)
.Push()
.child("title")
.setValue(text.getText().toString());
*/
Firebase ref = new Firebase(Config.FIREBASE_URL);
String name = editTextName.getText().toString().trim();
String address = editTextAddress.getText().toString().trim();
//Creating Person object
Person person = new Person();
//Adding values
person.setName(name);
person.setAddress(address);
ref.child("Person").setValue(person);
}
});
new Firebase(Config.FIREBASE_URL).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
//Getting the data from snapshot
Person person = postSnapshot.getValue(Person.class);
//Adding it to a string
String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n";
//Displaying it on textview
textViewPersons.setText(string);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
ここで何が間違っていますか?誰もこれで私を助けることができますか?
あなたは常に同じrefを使用しています
_ Person person = new Person();
//Adding values
person.setName(name);
person.setAddress(address);
ref.child("Person").setValue(person);
_
この方法でsetValue()を使用すると、指定した場所(子ノードを含む)のデータが上書きされます。
あなたの場合、あなたはこの理由で同じデータを上書きしています。
指定したFirebase参照に新しい子が追加されるたびに、Push()
メソッドを使用して一意のIDを生成する必要があります。
_ Person person = new Person();
//Adding values
person.setName(name);
person.setAddress(address);
DatabaseReference newRef = ref.child("Person").Push();
newRef.setValue(person);
_
次のような新しい子をデータに追加できます。
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userId = user.getUid();
Firebase rootRef = new Firebase(Config.USER_URL);
Firebase userRef = rootRef.child("Users");
Person newUser = new Person();
newUser.setFirstName(firstName);
newUser.setLastName(lastName);
userRef.child(userId).setValue(newUser);
ロギングユーザーが異なると、userIdは異なるため、Usersの下のuserIdの新しいログインユーザーの新しいデータリストに常に移動します。
buttonSave
をクリックするたびに_"Person"
_子を参照し、その値(setValue()
)を設定します。これにより、その1つの子のみが編集されます。代わりに Push() を使用してみてください。