我想将Retrofit和GreenDao结合起来,但是嵌套Json-Objects出现了问题.我的嵌套字段保持为空.
这是Json DataStructure
[
{
"id": 1,
"street": "Streetname",
"zipcode": 12345,
"city": "MyCity",
"phone_number": "+123456789",
"position": "12.0000, 9.0000",
"company": {
"title": "CompanyName",
"group": {
"title": "GroupName"
}
}
}
]
我的DaoGenerator看起来像这样
Entity customItem = schema.addEntity("CustomItems");
customItem.addIdProperty();
customItem.addStringProperty("street");
customItem.addIntProperty("zipcode");
customItem.addStringProperty("city");
customItem.addStringProperty("phone_number");
customItem.addStringProperty("position");
Entity company = schema.addEntity("Company");
company.addIdProperty();
company.addStringProperty("title");
Entity group = schema.addEntity("Group");
group.addIdProperty();
group.addStringProperty("title");
Property companyPropId = customItem.addLongProperty("companyId").notNull().getProperty();
customItem.addToOne(company, companyPropId);
Property groupPropId = company.addLongProperty("groupId").notNull().getProperty();
company.addToOne(group, groupPropId);
我的问题是customItem.getCompany()返回null,但“ id”到“ position”的值很好.我不确定问题是什么,因为我的CustomItem类包含该成员
private Company company;
和公司的设置者,我看不到任何错字.
public void setCompany(Company company) {
if (company == null) {
throw new DaoException("To-one property 'companyId' has not-null constraint; cannot set to-one to null");
}
synchronized (this) {
this.company = company;
companyId = company.getId();
company__resolvedKey = companyId;
}
}
解决方法:
我可以运行它,但是有多个问题.
1)当我想保留CustomItem,Company和Group时,我遇到的问题是,getter getCompany()和getGroup()返回null,因为它们不直接返回成员而是从数据库中获取成员.因此,我在生成的CustomItem实体类中添加了一个吸气剂,它仅返回公司成员.现在,我可以将公司插入数据库.吸气剂看起来像这样:
// KEEP METHODS - put your custom methods here
public Company getCompanyLocal() {
return company;
}
// KEEP METHODS END
公司和集团也一样.但是还有另一个问题…
2)第二个问题是实体“ Group”,因为“ group”是保留的SQL关键字.我看到了一个解决方案和针对此问题的错误解决方法:
>好方法是将json数据从“组”更改为“ business_group”,并根据此更改您的DAO.做完了
>不好的解决方法,如果您处于与我一样的情况,无法更改json,则可以执行以下操作.我根本不坚持这个小组,但是可以通过公司访问它.它以某种方式出现在这里.因此,像上面的CustomItem的getter一样,我在我的Company类中添加了getter.它有效,但是您应该避免这种情况.由于您无法从数据库中查询数据库的组或装入组.