2016-06-01 21 views
2

これはfirebaseにpersonオブジェクトを追加するためのコードです。firebaseデータベースに新しいデータを追加した後にすべてのデータを取得する方法

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("Person"); 


    buttonSave.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      String name = editTextName.getText().toString().trim(); 
      String address = editTextAddress.getText().toString().trim(); 

      //Creating Person object 
      Person person = new Person(); 
      person.setName(name); 
      person.setAddress(address); 
      new Firebase(Config.FIREBASE_URL).child("Person").push().setValue(person); 
     } 
    }); 

    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot postSnapshot : dataSnapshot.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(DatabaseError databaseError) { 
      System.out.println("The read failed: " + databaseError.getMessage()); 
     } 
    }); 

データの追加は正常に機能しており、すべての追加によって人のための新しいキーが作成されます。

addValueEventListenerは、最後に追加されたエントリのみを表示しています。私はすべてのエントリーデータを欲しい。

誰もが私にこれを助けることができますか?

+0

をあなたは 'すべてを交換された場合は、確認しましたmyRef '新しい人物との内容? – Sunshinator

答えて

2

ノードがPersonノードで変更されるたびに、onDataChange()によって通知されます。そこではあなたの呼び出しごとに、次に人を超えるループと:

textViewPersons.setText(string); 

だからあなたは常に一人一人からの情報で、テキストビューの内容を置き換えます。各ループの後、最後のユーザーの情報だけが表示されます。

System.out.println(string); 

をこれを使用すると、テキストビューでlogcatで一人一人が、唯一の最後の人が表示されます:あなたは簡単にコードを追加することにより、すべての人々をループしていることがわかります。

解決策の1つは、どちらも項目のリストを処理するListViewまたはRecyclerViewを使用することです。もう一つ、それはテキストビューに文字列を追加するすべてのユーザーを表示する方法を(迅速に実装する):

textViewPersons.setText(textViewPersons.getText()+string+"\n"); 
0

それが助け場合は、これを試してみてください:

String dataviewer=new String(); 

Firebase firebase=new Firebase(Config.FIREBASE_URL); 

buttonSave.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     String name = editTextName.getText().toString().trim(); 
     String address = editTextAddress.getText().toString().trim(); 

     //Creating Person object 
     Person person = new Person(); 
     person.setName(name); 
     person.setAddress(address); 
     new Firebase(Config.FIREBASE_URL).child("Person").push().setValue(person); 
    } 
}); 

    firebase.child("Person").addChildEventListener(new ChildEventListener() { 
     // Retrieve values as they are added to Firebase 
     @Override 
     public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { 

      Map<String,Object> vals=(Map<String,Object>)snapshot.getValue(); 
      String name_person=String.valueOf(vals.get("name")); 
      String address_person=String.valueOf(vals.get("address")); 
      dataviewer+="Name: " + name_person + "\nAddress: " + address_person + "\n\n"; 
      } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 


     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
関連する問題