这是我在 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 中只能看到最后一个人。
一种解决方案是使用 ListView
或 RecyclerView
,它们都处理项目列表。另一种(更快实现)向所有用户显示在 TextView 中附加字符串的方法:
textViewPersons.setText(textViewPersons.getText()+string+"\n");
关于android - 在firebase数据库中添加新数据后如何获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563993/