【问题标题】:get data out of room database to from a livedata object从房间数据库中获取数据以从 livedata 对象
【发布时间】:2018-08-27 15:17:43
【问题描述】:

早安,

我需要一些有关 LiveData 和 Room 数据库的帮助。我的想法是让用户通过单击按钮来备份 Room 数据库的内容,然后将数据库的内容保存为 JSON 文件。

我遇到的问题如下:

当用户单击按钮备份数据库时,我想从数据库中取出数据。我的应用程序结构如下:

道

@Query("SELECT * FROM media")
LiveData<List<Media>> getAll();

存储库

private final MediaDao mMediaDao;
public LiveData<List<Media>> getListOfMedia() {
    return mMediaDao.getAll();
}

ViewModel

public LiveData<List<Media>> getMedia() {
    return mMediaRepository.getListOfMedia();
}

通常我会做的是观察片段上的 LiveData,然后任何更改都会让我从实时数据对象中获取数据。问题是数据没有“改变”。

那么当用户点击按钮时如何从 Livedata 对象中获取数据呢?

【问题讨论】:

  • 将 LiveData&lt;List&lt;Media&gt;&gt; getAll(); 更改为 List&lt;Media&gt; getAll();
  • 这不是最理想的解决方案,有没有更好的方法来做到这一点而不必删除 LiveData?
  • 那么需要观察你的备份数据变化吗?
  • 不,我只是觉得这是一种避免 LiveData 的肮脏方式
  • 如果没有必要,不要让你的生活变得更艰难:developer.android.com/training/data-storage/room/…

标签: android android-room android-livedata


【解决方案1】:

这可能有点晚了,但您可以为同一个数据集创建多种查询方法。

例如,我有两种获取相同数据的方法,一种返回LiveData&lt;List&lt;Media&gt;&gt; 对象,另一种返回List&lt;Media&gt;,如下所示:

@Query("SELECT * FROM media")
LiveData<List<Media>> getLiveAll();

@Query("SELECT * FROM media")
List<Media> getAll();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多