使用 ActiveAndroid ORM 和 Retrofit 保存和检索数组列表

Save and retrieve Arraylists using ActiveAndroid ORM and Retrofit

我在我的应用程序中使用 Retrofit 和 ActiveAndroid ORM。我有以下型号 class:

@Table(name = "formresource")
public class FormResource extends Model implements Serializable{

    @Column(name="name")
    @SerializedName("name")
    @Expose
    private String name;

    @Column
    @SerializedName("resources")
    @Expose
    private List<FormResource> resources = new ArrayList<FormResource>();

    @Column(name = "valueReference")
    @SerializedName("valueReference")
    @Expose
    private String valueReference;


    @Column(name = "uuid")
    @SerializedName("uuid")
    @Expose
    private String uuid;

    @Column(name = "display")
    @SerializedName("display")
    @Expose
    private String display;

    @Column(name = "links")
    @SerializedName("links")
    @Expose
    private List<Link> links = new ArrayList<Link>();

    public FormResource()
    {
        super();
    }

    public String getUuid() {
        return uuid;
    }


    public void setUuid(String uuid) {
        this.uuid = uuid;
    }


    public String getDisplay() {
        return display;
    }


    public void setDisplay(String display) {
        this.display = display;
    }


    public List<Link> getLinks() {
        return links;
    }


    public void setLinks(List<Link> links) {
        this.links = links;
    }

    public String getValueReference() {
        return valueReference;
    }

    public void setValueReference(String valueReference) {
        this.valueReference = valueReference;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<FormResource> getResources() {
        return resources;
    }

    public void setResources(List<FormResource> resources) {
        this.resources = resources;
    }

}

现在,我在启动应用程序时获取了一次Formresources并保存。然后在另一个 activity 中,我使用保存的表单资源来填充列表视图。这很好用。现在,我想像这样访问嵌套的表单资源:

formresourcelist.get(position).getResources();

这总是 returns List<FormResource> 的空白列表。我应该怎么做才能正确保存和检索此列表?我需要同时保持与 Retrofit 的兼容性。

由于您正在使用 Retrofit 来填充 FormResource 数据,因此您不应初始化模型中的任何字段。

这一行是问题所在:

private List<FormResource> resources = new ArrayList<FormResource>();

尝试删除初始化并像这样声明字段:

private List<FormResource> resources;

然后尝试调用 formresourcelist.get(position).getResources();

祝你好运!

我想我找到了解决方法。我在模型 Class 中进行了以下更改:

@Table(name = "formresource")
public class FormResource extends Model implements Serializable{

    Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    Type formresourcelistType = new TypeToken<List<FormResource>>(){}.getType();


    @SerializedName("resources")
    @Expose
    private List<FormResource> resources = new ArrayList<FormResource>();

    @Column(name = "resources")
    @Expose
    private String resourcelist;


    public List<FormResource> getResources() {
        return resources;
    }

    public void setResources(List<FormResource> resources) {
        this.resources = resources;
    }

    public void setResourcelist()
    {
        this.resourcelist=gson.toJson(resources,formresourcelistType);
    }

    public List<FormResource> getResourceList() {

        List<FormResource> resourceList=gson.fromJson(this.resourcelist,formresourcelistType);
        return resourceList;
    }

}

基本上我正在序列化 ArrayList 并将其作为字符串保存在数据库中。在保存 FormResource 时,我执行以下操作:

formresourceObject.setResourcelist();
formresourceObject.save();