Firestore:(21.4.1)[CustomClassMapper]:无设置器/字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firestore:(21.4.1)[CustomClassMapper]:无设置器/字段相关的知识,希望对你有一定的参考价值。
我有一个User
类,可为用户节省一些额外的数据。此数据存储在Firestore中/来自Firestore。我有几个正在工作的字段(name
,surname
,lastLogin
),但其中几个没有工作(blocked
)。
当我公开该字段时,它们会起作用,但是当我尝试使用二传手时,它不会起作用。我尝试清理并重建它。我知道由于@Exclude
的原因,它没有保存该字段。但是即使删除@Exclude
,警告(Firestore: (21.4.1) [CustomClassMapper]: No setter/field for blocked found on class User
)仍然存在。
我做错了什么?字段类型无关紧要,我添加了一个新的String
字段,该字段给出了相同的警告,而name
和surname
起作用。
数据库:
**userid**
"name" : "John",
"surname" : "Doe",
"lastLogin" : **timestamp**,
"blocked" : "true"
班级:
@Keep
public class User
private static User instance;
private String name;
private String surname;
private Date lastLogin;
private boolean blocked = false;
public static User Instance()
if(instance == null)
instance = new User();
return instance;
private User()
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getSurname()
return surname;
public void setSurname(String surname)
this.surname = surname;
public Date getLastLogin()
return lastLogin;
public void setLastLogin(Date lastLogin)
this.lastLogin = lastLogin;
@Exclude
public boolean isBlocked()
return blocked;
public void setBlocked(boolean blocked)
this.blocked = blocked;
[尝试创建具有所有类属性的参数的构造函数以及非参数构造函数,然后在您存储在firebase中的java类中,从用户创建对象并传递它。
例如:
package com.example.spacing.Model;
public class User
private String username;
private String phone;
private String id;
private String imageURL;
private String email;
public User(String username, String email ,String phone, String id, String imageURL)
this.username = username;
this.email=email;
this.phone = phone;
this.id = id;
this.imageURL = imageURL;
public String getImageURL()
return imageURL;
public String getEmail()
return email;
public void setEmail(String email)
this.email = email;
public String getId()
return id;
public void setId(String id)
this.id = id;
public User()
public String getUsername()
return username;
public void setUsername(String username)
this.username = username;
public String getPhone()
return phone;
public void setPhone(String phone)
this.phone = phone;
和
FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(user);
您的代码中的问题是User
类中的构造函数为私有。这不是创建类的新实例的正确方法。 JavaBeans require a no-argument constructor存在。
当Cloud Firestore SDK反序列化来自数据库的对象时,它要求所有正在使用的对象都具有此public无参数构造函数,以便它可以实例化该对象。对象中的字段是通过使用公共setter方法或直接访问公共成员来设置的,正如您已经尝试过的。
由于您的构造函数是私有的,因此SDK并不真正知道如何创建其实例。因此,必须将其更改为公开。创建该类的正确方法应该是:
public class User
private String username;
private String phone;
private String id;
private String imageURL;
private String email;
public User() //Needed for Cloud Firestore
public User(String username, String phone, String id, String imageURL, String email)
this.username = username;
this.phone = phone;
this.id = id;
this.imageURL = imageURL;
this.email = email;
//Getters and setters are not mandatory
还请注意,不是需要设置器和获取器。设置器始终是可选的,因为如果没有JSON属性的设置器,Firebase客户端将直接在字段上设置值。
以上是关于Firestore:(21.4.1)[CustomClassMapper]:无设置器/字段的主要内容,如果未能解决你的问题,请参考以下文章
@firebase/firestore:Firestore (8.6.5):无法访问 Cloud Firestore 后端
@firebase/firestore:Firestore (8.6.2):无法访问 Cloud Firestore 后端(React Js)
React Native重复超时将集合写入firestore@firebase/firestore:Firestore(8.4.2):连接WebChannel传输错误
@firebase/firestore:Firestore (5.0.4):无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应
Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端