我无法保存相关模型(ActiveAndroid)

时间:2015-01-27 07:05:44

标签: android retrofit activeandroid

我使用了库ActiveAndroid with RetroFit

如果我有一个简单的模型,它一切都很好。但如果模型包含不同的模型,我不知道这些是如何存储在数据库中的

我的模特:

@Table(name="User7s")
public class User extends Model {
    @Expose
    @Column(name="name")
    @SerializedName("name")
    public String name;
    @Expose
    @Column(name="sname")
    @SerializedName("sname")
    public String sname;
    @Expose
    @Column(name="age")
    @SerializedName("age")
    public int age;
}

我的第二个模特:

@Table(name="Params")
public class Params extends Model {
    @Expose
    @Column(name="heigth")
    @SerializedName("heigth")
    public String heigth;
    @Expose
    @Column(name="weight")
    @SerializedName("weight")
    public String weight;
}

我的JSON:

{
    "name": "Pavel",
    "sname": "Petrashov",
    "age": 24,
    "params": {
        "heigth": 188,
        "weight": 72
    }
}

然后我保存用户。但我希望我的用户包含参数。我该如何添加它们?

public void saveUser(View view) {
        RestApiStorege.me().getApiUser().getUser(new Callback<User>() {
            @Override
            public void success(User user, Response response) {
               user.save();
            }

            @Override
            public void failure(RetrofitError error) {
                Log.d("MyLog",error.getBody().toString());
            }
        });
    }

编辑:我希望我的模型看起来像保存

@Table(name="User7s")
public class User extends Model {
    @Expose
    @Column(name="name")
    @SerializedName("name")
    public String name;
    @Expose
    @Column(name="sname")
    @SerializedName("sname")
    public String sname;
    @Expose
    @Column(name="age")
    @SerializedName("age")
    public int age;
    @Expose
    @Column(name="params")
    @SerializedName("params")
    public Params params;

    public User() {
        super();
    }
}

1 个答案:

答案 0 :(得分:1)

听起来你想要做的就是这样:

user.save();

这应该可以在不抛出任何红色标记的情况下工作但是当您尝试检索用户对象并访问params时,您可能会得到一个空对象异常,因为不会设置params。相反,你必须做这样的事情:

params.save();
user.save();

这会将params保存到数据库中,然后当您保存用户时,您将能够检索params。问题是你没有保存params。如果您想让生活更轻松,可以向User对象添加一个类似于此

的方法
public void CascadeSave() {
    this.params.save();
    this.save();
}

这将为您处理所有事情,您只需记住不再对用户对象使用.save()