web-dev-qa-db-ja.com

firebaseに新しいデータを追加する方法android

これは、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());
        }
    });

ここで何が間違っていますか?誰もこれで私を助けることができますか?

12
user3559471

あなたは常に同じ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);
_
29

次のような新しい子をデータに追加できます。

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の新しいログインユーザーの新しいデータリストに常に移動します。

1
Loyal Fine

buttonSaveをクリックするたびに_"Person"_子を参照し、その値(setValue())を設定します。これにより、その1つの子のみが編集されます。代わりに Push() を使用してみてください。

0
AL.