Получение имени проекта при отображении данных из базы данных Firebase - PullRequest
0 голосов
/ 08 мая 2020

Я показываю записи из базы данных Firebase Realtime, когда я использовал:

     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 enter image description here:

Мой код для отображения записей:

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

My Member Class :

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

Я хочу отображать данные, но отображается имя проекта.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

но теперь при отображении я получаю имя com.example.project

Эти два элемента, которые отображаются в вашем эмуляторе, не являются «именем проекта», эти символы являются адресами объекты, существующие в памяти к моменту их создания. Когда вы создаете объекты List<Member> и передаете их адаптеру, адаптер пытается вызвать toString() для всех этих объектов. Поскольку вы не переопределили этот метод в своем классе Member, эти адреса отображаются. Есть два способа решить эту проблему.

Первый - переопределить метод toString() в вашем Member классе, придав ему правильную реализацию:

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

Таким образом, вы говорите адаптеру отображать значение memberId вместо адреса в памяти для каждого объекта.

Вторым решением было бы изменить ваш адаптер на тип Строка. Таким образом, вы должны передать List<String> вместо List<Member>, список, который должен содержать в виде строковых значений данные, которые вы хотите отобразить. Если мы возьмем в качестве примера указанное выше свойство, вы должны создать список идентификаторов участников. Если вам нужно значение другого свойства, вы должны создать список имен или телефонных номеров, или вы можете объединить больше значений в одну строку.

0 голосов
/ 08 мая 2020

ArrayAdapter не понимает, как отображать объект «Член». Итак, чтобы отображать ваши данные, либо создайте специальный адаптер массива, либо преобразуйте его в объект «String»

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


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...