2016-07-25 49 views
0

我在我的應用程序中使用了Retrofit和ActiveAndroid ORM。我有以下Model類:使用ActiveAndroid ORM保存並檢索Arraylists並對其進行修改

@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並保存它。然後在另一個活動中,我使用保存的formresources填充listview。這工作得很好。現在,我想訪問嵌套formresources這樣的:

formresourcelist.get(position).getResources(); 

這總是返回List<FormResource>一個空白列表。我應該如何正確保存和檢索這個列表?我需要同時保持與Retrofit的兼容性。

回答

0

我想我找到了解決方法。我在模型類中做了以下更改:

@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(); 
0

由於您使用Retrofit來填充FormResource數據,因此您不應該初始化模型中的任何字段。

這條線的問題是:

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

嘗試刪除初始化和剛剛宣佈領域,如:

private List<FormResource> resources; 

,然後嘗試調用formresourcelist.get(position).getResources();

祝你好運!

+0

在添加ActiveAndroid ORM支持之前,數據正在填充。將其從Pojo更改爲Model類時可能發生了什麼變化? – Avijit

+0

注意:其他領域得到保存罰款......這只是在調用save()時沒有被序列化和保存正確的Arraylists。 – Avijit

+0

您是否嘗試刪除'= new ArrayList ();'初始化?其他領域沒有初始化器,所以它可能與此有關。 – reidzeibel

相關問題