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

标签 android firebase firebase-realtime-database

这是我在 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());
        }
    });

添加数据工作正常,每次添加都会为人员创建一个新 key 。

但是 addValueEventListener 仅向我显示最后添加的条目。我想要所有条目数据。

谁能帮我解决这个问题吗?

最佳答案

每当 Person 节点发生任何变化时,您都会通过 onDataChange() 收到通知。在那里你循环遍历人员,然后遍历每个调用:

textViewPersons.setText(string);

因此,您不断地用每个人的信息替换 TextView 的内容。每次循环后,它最终将仅显示最后一个用户的信息。通过添加以下内容,您可以轻松地看到代码循环了所有人:

System.out.println(string);

这样,您将在 logcat 中看到每个人,但在 TextView 中只能看到最后一个人。

一种解决方案是使用 ListViewRecyclerView,它们都处理项目列表。另一种(更快实现)向所有用户显示在 TextView 中附加字符串的方法:

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

关于android - 在firebase数据库中添加新数据后如何获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563993/

相关文章:

python - python 上的 Firebase 日期时间转换错误

java - 如何在firebase数据库android中存储对象的数组列表

javascript - 到达末尾后停止查询数据

ios - 无法获得对Firebase数据库IOS的许可

java - Android Java.util.Arrays 类

Android Studio(测试版)0.8.14 - 无法启动模拟器

android - 即使应用程序关闭也能保持服务运行

android - 如何为 Android 项目创建 build.xml?

swift - 加入不同的节点以使用 firebase 立即观察它们

javascript - 比较和更新firebase数据库中的字段