Firebase Firestore: документ не соответствует классу модели - PullRequest
0 голосов
/ 12 апреля 2020

Я пытался создать приложение с помощью Firebase Firestore, но после получения данных на SnapshotListener оно не сопоставляется с моей моделью.

Вот мой Model класс

public class BlogPost {
    private String description;
    private String image;
    private String user_id;
    private String thumbnail_url;
    private Timestamp timestamp;
    public BlogPost() {
    }
    public BlogPost(String description, String image, String user_id, String thumbnail_url, Timestamp  timestamp) {
        this.description = description;
        this.image = image;
        this.user_id = user_id;
        this.thumbnail_url = thumbnail_url;
        this.timestamp = timestamp;
    }

    public String getImageUrl() {
        return image;
    }

    public void setImageUrl(String image) {
        this.image = image;
    }

    public String getUserId() {
        return user_id;
    }

    public void setUserId(String user_id) {
        this.user_id = user_id;
    }

    public String getThumbnailUrl() {
        return thumbnail_url;
    }

    public void setThumbnailUrl(String thumbnail_url) {
        this.thumbnail_url = thumbnail_url;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Timestamp getPostTime() {
        return timestamp;
    }

    public void setPostTime(Timestamp timestamp) {
        this.timestamp = timestamp;
    }

}

Для добавления данных я использую этот код:

firestore.collection("posts").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

                for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()){
                    if (doc.getType() == DocumentChange.Type.ADDED){
                        BlogPost blogPost = doc.getDocument().toObject(BlogPost.class);

                        blogList.add(blogPost);`

                        blogRecyclerAdapter.notifyDataSetChanged();
                    }
                }
            }
        });

Вот то, что я объект после сопоставления

BlogPost {description = 'post 6', image = 'null ', user_id =' null ', thumbnail_url =' null ', timestamp = null}

Вот скриншот структуры базы данных

Database Structure

Как видите, описание сопоставлено, но все остальные поля пусты. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 апреля 2020

Необходимо внести два изменения.

-> Сделать каждый элемент данных в вашем классе данных publi c

-> Аннотировать их с помощью @PropertName ()

  public class BlogPost {

   @PropertyName("description")
   public String description;
   @PropertyName("image")
   public String image;
   @PropertyName("user_id")
   public String user_id;
   @PropertyName("thumbnail_url")
   public String thumbnail_url;
   @PropertyName("timestamp")
   public Timestamp timestamp;
  }

попробуйте это.

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