如何在firebase数据库中添加新数据后获取所有数据

时间:2016-06-01 08:59:04

标签: android firebase firebase-realtime-database

这是我在firebase中添加person对象的代码。

    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只显示我最后添加的条目。我想要所有条目数据。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

每次Person节点发生任何变化时,都会通过onDataChange()收到通知。在那里你循环人,然后为每个电话:

textViewPersons.setText(string);

因此,您不断用每个人的信息替换文本视图的内容。在每个循环之后,它将最终显示最后一个用户的信息。通过添加:

,您可以轻松地看到代码遍历所有人
System.out.println(string);

通过这个,您可以在logcat中看到每个人,但只能看到文本视图中的最后一个人。

一种解决方案是使用ListViewRecyclerView,两者都处理项目列表。另一种(更快实现)方式向所有用户显示它在文本视图中追加字符串:

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

答案 1 :(得分: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) {

        }
    });