android-对嵌套的json对象使用Retrofit和GreenDao

我想将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.它有效,但是您应该避免这种情况.由于您无法从数据库中查询数据库的组或装入组.

上一篇:重磅来袭!腾讯,字节,阿里,小米,京东大厂Offer拿到手软!绝对干货


下一篇:Android中不推荐使用’java.lang.String’