在房间数据库中使用相同的类创建两个表

时间:2018-06-24 02:30:56

标签: android retrofit2 android-room

我正在使用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服务器分页。

  • 有什么方法可以添加新值来改进响应和映射 进入照相班

1 个答案:

答案 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);


                }