Java 从Firebase数据库显示数据时获取项目名称
我正在显示Firebase实时数据库中的记录,当时我正在使用:Java 从Firebase数据库显示数据时获取项目名称,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在显示Firebase实时数据库中的记录,当时我正在使用: ArrayList<String> list; ArrayAdapter<String> adapter; adapter = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.userInfo, list); list.add("Name :"+member.getName().toSt
ArrayList<String> list;
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.userInfo, list);
list.add("Name :"+member.getName().toString()+" Age :"+member.getAge().toString()+" Phone
:"+member.getPhone().toString()+"\n"+"------------------------");
我想显示数据,但它正在显示项目名称。ArrayAdapter不了解如何显示“成员”对象。因此,为了显示数据,可以制作一个自定义数组适配器,或者将其转换为“String”对象
阵列适配器;
数组列表
...
列表=新的ArrayList();
adapter=new ArrayAdapter(这个,R.layout.list\u white\u text,R.id.userInfo,list);
...
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot dts:DataSnapshot.getChildren())
{
member=dts.getValue(member.class);
添加(member.getName()+…);
}
但现在显示时,我得到com.example.project名称
emulator中显示的这两项不是“项目名称”,这些字符是创建时内存中存在的对象的地址。当您创建列表
对象并将其传递给适配器时,适配器尝试调用toString()
在所有这些对象上。由于您在成员
类中没有重写该方法,因此会显示这些地址。有两种方法可以解决此问题
第一种方法是在成员
类中重写toString()
方法,方法是为它提供一个正确的实现:
@Override
public String toString() {
return "Member{" +
"memberId='" + memberId+ '\'' +
'}';
}
这样,您就告诉适配器显示memberId
的值,而不是每个对象在内存中的地址
第二种解决方案是将适配器更改为字符串类型。这样,您应该传递一个列表
,而不是列表
,该列表应包含作为字符串值显示的数据。如果我们以上述属性为例,您应该创建一个成员ID列表。如果您需要该值对于另一个属性,则应创建名称或电话号码列表,或者可以在单个字符串中串联更多值
ListView listView;
FirebaseDatabase database;
DatabaseReference ref;
ArrayList<Member> list;
ArrayAdapter<Member> adapter;
Member member;
Button btnDlt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retreivedata);
member = new Member();
listView =(ListView)findViewById(R.id.listView);
btnDlt = (Button) findViewById(R.id.btnDlt);
database = FirebaseDatabase.getInstance();
ref = database.getReference("Member");
list = new ArrayList<Member>();
adapter = new ArrayAdapter<Member>(this,R.layout.list_white_text,R.id.userInfo, list);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dts: dataSnapshot.getChildren())
{
member = dts.getValue(Member.class);
list.add(member); // here i want to do list.add(member.getName().toString()); but not allowed
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
public class Member implements Serializable {
private String memberId;
private String Name;
private String Age;
private String Phone;
private String Height;
public Member() {
}
public Member(String memberId, String name, String age, String phone, String height) {
this.memberId = memberId;
Name = name;
Age = age;
Phone = phone;
Height = height;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAge() {
return Age;
}
public void setAge(String age) {
Age = age;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getHeight() {
return Height;
}
public void setHeight(String height) {
Height = height;
}
}
ArrayAdapter<String> adapter;
ArrayList<String> list
...
list = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this,R.layout.list_white_text,R.id.userInfo, list);
...
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dts: dataSnapshot.getChildren())
{
member = dts.getValue(Member.class);
list.add(member.getName()+...);
}
@Override
public String toString() {
return "Member{" +
"memberId='" + memberId+ '\'' +
'}';
}