多个布局recyclerView,数据来自Firebase

时间:2019-01-16 04:55:03

标签: android android-recyclerview google-cloud-firestore

我正在尝试从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,请确保不删除这些构造函数。

这是因为我需要一个空的构造函数,但是如果我在List上设置一个空的构造函数,我将无法在布局之间进行选择。

如果您知道答案或知道可以帮助我解决此问题的视频课,我将非常高兴,谢谢。

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 :(得分:1)

如错误消息所述,您的Users类没有无参数的构造函数,Cloud Firestore SDK能够从文档中的JSON数据创建该类是必需的。 / p>

要解决此问题,请将无参数的构造函数添加到您的类中:

public class Users ... {
    ...
    public Users() { }
    ...
}

答案 1 :(得分:1)

您需要使用默认值初始化变量。您可以在定义变量的地方初始化变量,也可以如下所示使用:

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

此外,将实现序列化的实现添加到模型中。

答案 2 :(得分:0)

我使用布尔值代替了布尔值:

        @Override
          public int getItemViewType(int position) {

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

                return CLASSE;

        }else {

               return USER;
        }

    }

}

所以现在它可以工作了。