Несколько макетов RecyclerView с данными, поступающими из базы - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь получить данные из Firestore и добавить их в представление переработчика, я пытался сделать это:

for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {
    if (doc.getType() == DocumentChange.Type.ADDED) {

        Users users = doc.getDocument().toObject(Users.class);

        if (users.getName() != null) {                
            if(users.getStatus() == null){                    
                mUsersList.add(new Users(true));
                mUsersList.add(users);                    
            }

            mUsersList.add(users);
            usersListAdapter.notifyDataSetChanged();
        }
    }
}

У меня уже правильно настроен адаптер, но когда я пытаюсь установить логический флаг, который необходим для отображения одного или другого макета, появляется:

java.lang.RuntimeException: не удалось десериализовать объект. Класс com.example.gusta.client.list_model.Users не определяет конструктор без аргументов. Если вы используете ProGuard, убедитесь, что эти конструкторы не удалены.

Это я, потому что для этого мне нужен пустой конструктор, но если я установлю пустой конструктор в своем списке, я не смогу выбирать между макетами.

Если вы знаете ответ или знаете видео-класс, который может помочь мне решить эту проблему, я был бы очень рад, спасибо.

public class Users {

    String user,status,image,descricao;
    private Boolean adcionais;



        public Users(){

        }

        public Users(String name, String status,Boolean adcionais) {
            this.user = name;
            this.status = status;
            this.adcionais = adcionais;
        }

        public String getName() {
            return ;
        }

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

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public String getImage() {
            return image;
        }

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

        public String getDescricao() {
            return descricao;
        }

        public void setDescricao(String descricao) {
            this.descricao = descricao;
        }


        public Boolean getAdcionais() {
            return adcionais;
        }

        public void setAdcionais(Boolean adcionais) {
            this.adcionais = adcionais;
        }
    }

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вам нужно инициализировать переменную значениями по умолчанию. Либо вы можете инициализировать переменные там, где вы их определили, либо использовать как показано ниже:

public class Users ... {
...
public Users() { 
    Users("","",false) // "" or null for String
  }
  ...
}

Также добавьте в вашу модель инструмент Serializable.

0 голосов
/ 16 января 2019

Вместо логического, я использовал это:

        @Override
          public int getItemViewType(int position) {

        if(mUsersList.get(position).getStatus() ==null){

                return CLASSE;

        }else {

               return USER;
        }

    }

}

Так что теперь он работает.

0 голосов
/ 16 января 2019

Как говорится в сообщении об ошибке, ваш класс Users не имеет конструктора без аргументов, который необходим для того, чтобы Cloud Firestore SDK мог создавать класс из данных JSON в документе.

Чтобы решить эту проблему, добавьте конструктор без аргументов в ваш класс:

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