使用Room时,是否应该将Entity与Pojo分开,以及如何将列表插入db?

时间:2018-06-23 10:31:27

标签: java android kotlin android-room android-livedata

我正在使用Room实施缓存,并且遇到了几个问题:

1。实体是否应该与pojo相同?我将它们分开...这里的问题是,我认为我一直使用Pojo,而在Repository中一直都是Entity。我通过将Pojo转换为Entity并在应用程序的其他地方使用实体解决了此问题(ViewModel-> View-> Adapter-> ViewHolder) 请参见下面的存储库代码:

public List<com.example.newsapp.model.db.Photo> pojoToEntity(List<Photo> list){
    List<com.example.newsapp.model.db.Photo> photos = new ArrayList<>();
    for(Photo photo : list){
        com.example.newsapp.model.db.Photo minimizedPhoto = new com.example.newsapp.model.db.Photo();
        minimizedPhoto.setAlbumId(photo.getAlbumId().toString());
        minimizedPhoto.setTitle(photo.getTitle());
        minimizedPhoto.setImageURL(photo.getThumbnailUrl());
        photos.add(minimizedPhoto);
    }
    return photos;
}

这可以接受吗?最佳做法是什么?我已经看到了Room的许多示例,但是没有一个谈论这个问题,他们只是将@Entity放在类中,仅此而已。如果应用程序一直使用POJO,那么POJO怎么使用实体类呢?

  1. 如何将列表插入数据库?我们逐个对象地做那个吗?假设在Dao中具有此功能

    void insertAll(Photo... photos);
    

如何实现此目的并能够插入列表:

    void insertAll(LiveData<List<Photo>> photos);

来自存储库的调用如下:

  public void insert (List<com.example.newsapp.model.db.Photo> photos) {
        new insertAsyncTask(mArticleDao).execute((com.example.newsapp.model.db.Photo[]) photos.toArray());
    }

我也对此解决方案感到好奇,因此希望听到反馈/建议

0 个答案:

没有答案