转换ForeignCollection到ArrayList的 - ORMLite,GSON和And

2019-08-01 02:44发布

我道歉,如果我不是我的解释超清晰,但我会增加,如果要求修改为清楚起见这个问题。

我正在开发一个Android应用程序,它通过一个外部的API和数据存储在本地使用ORMLite接收数据。 在此之前在本地存储数据,并使用ORMLite我有哪些检索JSON从服务器,并通过分析它的型号:

Gson gson = new Gson();

String result = ApiClient.httpPost("/user_route");

User user = gson.fromJson(result, User.class);

用户类被定义

public class User {
  int id;
  String name;
  ArrayList<Image> media;
}

和图像类:

public class Image {
  int id;
  int creator_id;
  String url;
}

这是模型和方法的简单示意图,但我相信我已经把所有相关信息。 顺便说一句, media是包含一个JSON对象Images

现在,我想也是本地存储的数据。 为了让用户使用和图像之间的关系ORMLite看来你必须使用ForeignCollection类和@ForeignCollectionField注解。 我不相信GSON可以直接解析JSON为media在用户类作为ForeignCollection对象领域,所以我想我需要创建两个字段mediaCollectionmedia

现在使用ORMLite User类看起来是这样的:

@DatabaseTable(tableName = "Users")
public class User {
  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField
  String name;

  @ForeignCollectionField
  ForeignCollection<Image> mediaCollection;

  ArrayList<Image> media;
}

与ORMLite Image类看起来是这样的:

@DatabaseTable(tableName = "Images")
public class Image {

  @DatabaseField(generatedId = true)
  int id;

  @DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
  private User user;

  @DatabaseField
  int creator_id;

  @DatabaseField
  String url;

}

应用工程的流程是怎样第一次我打了本地数据库的用户。 我执行一些逻辑然后确定如果我需要实际服务器命中“更新”或“刷新”用户数据。

数据是否来自本地或从远程服务器,我需要显示Image以相同的图。 目前的情况是,为对所述URL Image被存储在不同类型的根据数据是否是本地或远程对象。 我想这样做的是,如果Image存储在ForeginCollection对象,转换该对象到一个ArrayList ,然后用我的代码的其余部分,提取的进行Image的URL,并显示它。

我想有两个问题。

  1. 这是一个很好的计划,或者我应该写两个完全独立的提取方式Image从数据的URL,而不是转换对象ForeignCollectionArrayList

  2. 如果它一个很好的计划,我怎么一个转换ForeginCollection一个ArrayList

Answer 1:

这是一个很好的计划,或者我应该写两个完全独立的从数据中提取的图片网址,而不是从ForeignCollection转换对象的ArrayList的方法呢?

它应该工作。 我没有看到一个简单的方法来做到这一点并非如此。

几点:

  • 是否有某种方式来标记ForeignCollection为瞬态所以它在传输时JSON忽略? 然后,你可以使用相同的User对象既JSON和ORMLite。
  • 某种hydrate()方法将是很好,所以它会从转换media - > mediaCollection ,反之亦然。
  • 如果您需要加载JSON传输图像到国外收集,那么你应该使用Dao.getEmptyForeignCollect(...)方法。 一旦你的集合,你可以添加图片到它,他们将被添加到表。

如果它是一个很好的计划,我怎么一个ForeignCollection转换到一个ArrayList?

这种情况很容易。 一个ForeignCollection是一个Collection 。 你可以做一个:

media = new ArrayList<Image>(mediaCollection);

所以,你的User.getMedia()方法应该检查null ,如果是这样,从转换mediaCollection领域。



Answer 2:

刚刚从转换@ForeignCollectionFieldArrayList<Object>你可以这样做:

ArrayList<Object> taskFieldsList = new ArrayList<Object>(your collection);

希望这是帮助你。



Answer 3:

你不能创造出比第一存储在数据库中的对象以外的ForeignCollection,然后让ormlite在ForeignCollection检索。 你可以使用一个集合,而不是一个ForeignCollection的,但它的工作方式相同。 我要做的是:我在父类两个集合。 其一是,JSON或XML进行反序列化到一个ArrayList。 当父对象的存储,在DAO存储对象ArrayList中到数据库中,已链接到其他集合,一个ForeignCollection表。 当父对象被检索时,它自动包含在ForeignCollection的对象。 它并不完美,但它的作品。



文章来源: Convert ForeignCollection to ArrayList - ORMLite, Gson and Android