【问题标题】:Getting Project name when displaying data from Firebase database显示 Firebase 数据库中的数据时获取项目名称
【发布时间】:2020-05-09 13:06:42
【问题描述】:

我在使用时显示来自 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().toString()+" Age :"+member.getAge().toString()+" Phone 
  :"+member.getPhone().toString()+"\n"+"------------------------"); 

记录显示正常,但要将数据从该活动传递到我正在使用的另一个活动:

      ArrayList<Member> list;
ArrayAdapter<Member> adapter;
 adapter = new ArrayAdapter<Member>(this,R.layout.list_white_text,R.id.userInfo, list);
list.add(member); 

但现在显示时我得到 com.example.project 名称 :

我的代码显示记录:

  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;
}
}

我想显示数据,但显示的是项目名称。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    但现在显示时我得到 com.example.project 名称

    您的模拟器中显示的这两项不是“项目名称”,这些字符是创建时内存中存在的对象的地址。当您创建 List&lt;Member&gt; 对象并将其传递给适配器时,适配器会尝试在所有这些对象上调用 toString()。由于您在Member 类中没有覆盖该方法,因此会显示这些地址。有两种方法可以解决这个问题。

    第一个方法是通过提供适当的实现来覆盖 Member 类中的 toString() 方法:

    @Override
    public String toString() {
        return "Member{" +
                "memberId='" + memberId+ '\'' +
                '}';
    }
    

    这样,您告诉适配器显示memberId 的值,而不是每个对象在内存中的地址。

    第二种解决方案是将适配器更改为字符串类型。这样,您应该传递一个List&lt;String&gt; 而不是List&lt;Member&gt;,该列表应该包含作为字符串值的您想要显示的数据。如果我们以上述属性为例,您应该创建一个成员 ID 列表。如果您需要另一个属性的值,那么您应该创建一个姓名或电话号码列表,或者您可以在单个字符串中连接更多值。

    【讨论】:

      【解决方案2】:

      ArrayAdapter 不理解如何显示“成员”对象。因此,为了显示您的数据,请制作自定义数组适配器或将其转换为“字符串”对象

      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()+...);
      }
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多