получить значение в documentSnapShot, но при преобразовании объекта в объект вернуть значение null, почему? - PullRequest
0 голосов
/ 26 марта 2020

Я использую Firestore в своем приложении. когда я получаю данные из этой базы данных, я получаю данные в documentSnapShot объект, но когда я преобразую documentSnapShot в пользовательский объект, он инициализируется, но не содержит никаких данных.

My Firebase Firestore DB:

1

мои классы POJO: класс FirebaseData

public class FirebaseData {

    private List<Group> group = null;

    /**
     * No args constructor for use in serialization
     * 
     */
    public FirebaseData() {
    }

    /**
     * 
     * @param group
     */
    public FirebaseData(List<Group> group) {
        super();
        this.group = group;
    }

    public List<Group> getGroup() {
        return group;
    }

    public void setGroup(List<Group> group) {
        this.group = group;
    }

}

группа классов

public class Group {

    private String name;
    private List<Sticker> stickers = null;
    private Integer id;

    /**
     * No args constructor for use in serialization
     * 
     */
    public Group() {
    }

    /**
     * 
     * @param name
     * @param stickers
     * @param id
     */
    public Group(String name, List<Sticker> stickers, Integer id) {
        super();
        this.name = name;
        this.stickers = stickers;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Sticker> getStickers() {
        return stickers;
    }

    public void setStickers(List<Sticker> stickers) {
        this.stickers = stickers;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

}


класс Sticker

public class Sticker {

    private String name;
    private String id;

    /**
     * No args constructor for use in serialization
     * 
     */
    public Sticker() {
    }

    /**
     * 
     * @param name
     * @param id
     */
    public Sticker(String name, String id) {
        super();
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}


MainActivity класс:

db.collection("PackGroups").document("1").get()
                    .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    Log.d("TAG : firebase" ,"onSuccess: "+documentSnapshot.getData());
                    FirebaseData firebaseData = documentSnapshot.toObject(FirebaseData.class );
                    recyclerView.setAdapter(new AdapterGroupPack(MainActivity.this, firebaseData.getGroup()));
                    recyclerView.getAdapter().notifyDataSetChanged();

                }
            });

1 Ответ

1 голос
/ 26 марта 2020

Проблема в вашем коде заключается в том, что поле List<Group> group объявлено в вашем классе FirebaseData, начинающемся со строчных букв, а в вашей базе данных - в верхнем (Group). Чтобы это работало, оба имени должны совпадать. Чтобы решить эту проблему, либо измените имя этого массива в базе данных, чтобы оно начиналось со строчной буквы, либо добавьте перед получателем следующую аннотацию:

@PropertyName("Group")
public List<Group> getGroup() {
    return group;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...