我正在使用Room作为该应用程序的数据库。我正在使用Retrofit从服务器获取数据。场景是我有一个名为照片的类,并用 Entity 注释,供房间使用,并且我使用该类通过Retroft映射API的响应。我需要使用相同的类创建两个表,例如:latest_photos表和popular_photos表。我该如何做到这一点。
我有一个通过插入新列来使用单个表的想法 表示天气照片很流行或最新,但我不知道 如何有效地实施它。
public void insertPhotos(最终列表照片){ ioExecutor.execute(new Runnable(){ @Override 公共无效run(){ photoDao.bulkInsert(updateList(photos)); } }); }
此处将插入照片列表(由20个照片对象组成)。我如何为每个照片对象添加一个新字段。 我已经尝试过使用for循环,但是这花了很多时间,因为我只收到20个项目,但通过Web服务器分页。
答案 0 :(得分:0)
我已经解决了这个问题,现在我只处理一张桌子。我插入了一个新列,以指示该照片是热门照片还是最新照片,但问题是服务器未返回任何有用的数据来填充此列。因此,唯一的解决方案是在映射到我的实体之前修改json响应。因此,将改造电话的返回类型设为 ResponseBody 即可返回json字符串本身而不是将其映射,因此我可以向json响应中添加一个属性,然后使用新添加的属性对其进行映射。
private void processData(Response<ResponseBody> response) {
if (response.isSuccessful()) {
try {
JSONObject jsonObject = new JSONObject(response.body().string());
JSONArray hits = jsonObject.getJSONArray("hits");
List<Photo> photos = new ArrayList<>();
for (int i = 0; i < hits.length(); i++) {
JSONObject photoJSONObject = hits.getJSONObject(i);
photoJSONObject.put("order", order); // add new property
String json = photoJSONObject.toString();
Gson gson = new Gson();
Photo photo = gson.fromJson(json, Photo.class);
photos.add(photo);
}