java“在类上找不到字段的setter/field”
我正在Android Studio中创建一个应用程序,它连接到一个云Firestore数据库。在数据库中,我有以下结构:
Myclass
- name = "test"
- subclass
- 0 = "String 1"
- 1 = "String 2"
类本身是这样声明的(删除了不相关的位):
public class Myclass {
private String name;
private String[] subclass;
// CONSTRUCTOR
public Chart() {}
//GETTERS
public String getName() { return this.name; }
// SETTERS
public void setSubclass(String[] thisSubclass) { this.subclass = thisSubclass; }
}
在活动中,Myclass对象的设置如下(同样,不相关的位被删除):
public class MyclassActivity {
DocumentReference docRef;
Myclass myItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set up database connection, read in itemId etc...
// ...omitted for clarity...
docRef = databaseRef.collection("myclass").document(itemId);
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
myItem = document.toObject(Myclass.class);
}
}
}
}
这会读入Myclass对象,并正确设置名称,但子类对象没有被设置——它仍然为null
在调试控制台中有以下消息:
No setter/field for subclass found on class path.to.app.Myclass
“setSubclass”函数呈灰色,好像从未使用过一样。我肯定问题很明显,但我看不出来
# 1 楼答案
模型类中有两个错误。第一个是构造函数的名称,它不同于类的名称,并且应该是相同的。第二,对于
subclass
字段,您只定义了setter,但没有定义getter你的
Myclass
类应该是这样的:不需要二传手。如果JSON属性没有setter,Firebase客户端将直接在字段上设置值,这就是为什么称为惯用。如果在代码中显式地需要它们,只需向模型类中添加以下setter,如下所示:
关于在Cloud Firestore数据库中使用数组的问题,请参见我的回答