关于单一事实来源谷歌文档说:
使用此模型,数据库充当单一事实来源,应用程序的其他部分使用我们的 UserRepository 访问它。无论您是否使用磁盘缓存,我们都建议您的存储库指定一个数据源作为应用程序其余部分的单一事实来源
根据文档,当我从远程服务器获取数据时,我保存所有数据,并且仅当我需要在活动中使用时从房间获取数据(实际上我收集在视图模型中定义的流)。
看起来真不错!它避免了不同的数据源混合在一起!但实际上我逐渐发现了一些奇怪的问题:
在我的应用程序中,我有一个服务器可以更改它的列表(因为我们有数据管理器网站,管理员可以更新或删除数据)。因此,为了从服务器获取最新的列表数据,我必须清除房间中存储的所有数据并再次从远程服务器获取数据。这个操作似乎多余:“为什么我可以直接从远程服务器获取数据”,我的意思是,我只从远程源获取数据也是单一来源的事实。它还会导致一个问题:我的应用程序会闪烁一会儿,因为清除数据会使列表变空并从服务器获取数据使列表变满!
最重要的是,似乎本地数据不是必需的,因为我必须保留来自远程服务器的最新列表。 有人可能会说,将数据保存到房间可以让我们的应用程序离线使用。我同意,但在这个地方,我的列表项代表一个图像 url,单击该项目后,应用程序将跳转到一个新活动并根据我们从列表中获取的 url 显示一个 ImageView。如果应用程序离线,ImageView 也无法加载 url。
我很困惑,我也无法立即加载所有图像网址(使用base64-url以避免加载无效),因为数据太多了。如果我说我需要这个列表中的搜索功能并且我需要将如此多令人难以置信的数据加载到我的房间中,这看起来是如此不真实和事件幻想!
简单来说:
房间是必须的吗?无法从远程获取数据吗?
如果需要空间,我遇到的问题如何解决,是我的错误使用导致的问题吗?
嗨@psycongroo,因为我理解你的问题,我想分享我的经验: