这是我在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只显示我最后添加的条目。我想要所有条目数据。
有人可以帮我吗?
答案 0 :(得分:2)
每次Person
节点发生任何变化时,都会通过onDataChange()
收到通知。在那里你循环人,然后为每个电话:
textViewPersons.setText(string);
因此,您不断用每个人的信息替换文本视图的内容。在每个循环之后,它将最终显示最后一个用户的信息。通过添加:
,您可以轻松地看到代码遍历所有人System.out.println(string);
通过这个,您可以在logcat中看到每个人,但只能看到文本视图中的最后一个人。
一种解决方案是使用ListView
或RecyclerView
,两者都处理项目列表。另一种(更快实现)方式向所有用户显示它在文本视图中追加字符串:
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) {
}
});