2016-06-01 10 views
9

これはfirebaseリアルタイムデータベースに新しい人物を追加する私の論理です。新しいエントリを作成する代わりに、新しいデータで古いデータを更新するだけです。firebase androidに新しいデータを追加する方法

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()); 
     } 
    }); 

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

+0

進み、古いAPIの –

+0

がこの上を見て使用していると、それはあなたを助けることがあります。-http://stackoverflow.com/questions/37338409/rerofit-firebase/37338410#37338410 – sushildlh

+2

@VeereshCharantimath新しいfirebaseドキュメントは役に立たない。これらの文書は、火災基盤の高度な専門家向けのもので、新しいものではありません。 –

答えて

23

:この方法でのsetValue()を使用

は、任意の子ノードを含む指定された場所にあるデータを、上書きされます。あなたのケースでは

あなたは、このような理由のために同じデータをオーバーライドしています。

新しい子供が指定されたFirebaseリファレンスに追加されるたびに、push()メソッドを使用して一意のIDを生成する必要があります。 userIdをロギングユーザーが異なる場合、したがって、あなたは常にのための新しいデータ・リストに移動します変わる

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); 

:あなたのような、あなたのデータに新しい子を追加することができます

Person person = new Person(); 
//Adding values 
person.setName(name); 
person.setAddress(address); 
Firebase newRef = ref.child("Person").push(); 
newRef.setValue(person); 
+0

お返事ありがとうございます。追加部分が期待どおりに機能しています。私はあなたがデータベースに追加されたすべての人を表示するように私がonDataChangeで行う必要がある変更について私を助けてください。 – user3559471

+0

リファレンスとしてref.child( "Person")を使用してonChildAdded()コールバックを使用できます。 –

0

子を編集しているbuttonSaveをクリックするたびに"Person"という子を参照し、その値(setValue())を設定しています。代わりにpush()を使用してください。あなたはいつも同じ参照

Person person = new Person(); 
//Adding values 
person.setName(name); 
person.setAddress(address); 
ref.child("Person").setValue(person); 

Check the doc使用している

0

ユーザの下にあるuserIdの新しいログインユーザ。新しいFirebaseドキュメントを通じて

関連する問題