Я сталкиваюсь со следующей ошибкой com.google.firebase.database.DatabaseException: не удается преобразовать объект типа java.lang.String в тип

У меня проблема с:

members = ds.getValue(Members.class);
listdata.add(members);

Помогите мне решить эту ошибку.

reference = fbd.getReference().child("Members");
        reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    members = new Members();
                    members = ds.getValue(Members.class);
                    listdata.add(members);


                }

                recyclerView.setAdapter(adpter);
                adpter.notifyDataSetChanged();

            }

Здесь модель класса

package com.example.positivethinkers;

public class Members {

String member_name;
String father_name;
String mobile;
String email;
String nid;
String address;
String password;
String balance;
String notify;
String occupation;
String prolink;
String nick;


public Members() {
}

public Members(String member_name, String mobile, String email, String prolink) {
    this.member_name = member_name;
    this.mobile = mobile;
    this.email = email;
    this.prolink = prolink;
}

public Members(String member_name, String father_name, String mobile, String email, String nid, String address, String password, String balance, String notify, String occupation, String prolink, String nick) {
    this.member_name = member_name;
    this.father_name = father_name;
    this.mobile = mobile;
    this.email = email;
    this.nid = nid;
    this.address = address;
    this.password = password;
    this.balance = balance;
    this.notify = notify;
    this.occupation = occupation;
    this.prolink = prolink;
    this.nick = prolink;
}



public String getMember_name() {
    return member_name;
}

public void setMember_name(String member_name) {
    this.member_name = member_name;
}

public String getFather_name() {
    return father_name;
}

public void setFather_name(String father_name) {
    this.father_name = father_name;
}

public String getMobile() {
    return mobile;
}

public void setMobile(String mobile) {
    this.mobile = mobile;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getNid() {
    return nid;
}

public void setNid(String nid) {
    this.nid = nid;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getBalance() {
    return balance;
}

public void setBalance(String balance) {
    this.balance = balance;
}

public String getNotify() {
    return notify;
}

public void setNotify(String notify) {
    this.notify = notify;
}

public String getOccupation() {
    return occupation;
}

public void setOccupation(String occupation) {
    this.occupation = occupation;
}

public String getProlink() {
    return prolink;
}

public void setProlink(String prolink) {
    this.prolink = prolink;
}

public String getNick() {
    return nick;
}

public void setNick(String nick) {
    this.nick = nick;
}

}

Здесь моя база данных

enter image description here

1
Emon Raihan 25 Фев 2020 в 19:17

2 ответа

Лучший ответ

Вы получаете следующую ошибку:

Не удается преобразовать объект типа java.lang.String в тип com.example.positivethinkers.Members

Потому что вы просматриваете объект dataSnapshot, который содержит свойства String, а не объекты Members. Когда вы добавляете ChildEventListener в узел Members, вызывается метод onChildAdded() для каждого дочернего элемента, который существует в этом узле. Таким образом, нет необходимости в итерации. Чтобы решить эту проблему, просто удалите цикл for, как показано в следующих строках кода:

reference = fbd.getReference().child("Members");
reference.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        members = new Members();
        members = ds.getValue(Members.class);
        listdata.add(members);
        adpter.notifyDataSetChanged();
    }
});

Перед этим создайте адаптер с пустым списком, а внутри обратного вызова просто сообщите ему об изменениях.

0
Alex Mamo 26 Фев 2020 в 10:48
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        members = new Members();
                        String name = ds.child("member_name").getValue(String.class);
                        String email = ds.child("email").getValue(String.class);
                        String mobile = ds.child("mobile").getValue(String.class);
                        String profile = ds.child("prolink").getValue(String.class);
                        Log.d("TAG", name + " / "+email+" / "+mobile+" / "+profile);
                        Members members = new Members(name, mobile, email, profile);
                        listdata.add(members);
                    }
}
-1
Emon Raihan 9 Мар 2020 в 07:18