使用 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();
我在我的应用程序中使用 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();