目前 Room 与 DB 到 UI 的集成运行良好:
用于 DB 操作的 Dao
用于与 Daos 交互并将数据缓存到内存中的存储库
ViewModel 抽象存储库并链接到 UI 生命周期
但是,出现了另一种情况,我很难理解如何正确实现 Room 使用。
我有一个纯静态的网络 API,它反映了服务器的 REST 架构。
有一个解析器方法遍历 URL 结构并通过反射将其转换为现有 API,并调用他找到的任何最终方法。
在此 API 中,每个 REST 操作都由等效 REST 命名结构类下的方法表示,即:
REST 中的 /contacts 等同于 API 中的类 Contacts.java
POST、GET、DELETE in rest 等同于各自类中的方法
例子:
public class Contacts {
public static void POST() {
// operations are conducted here
}
}
这是我的困难;我应该如何正确/正确地将 ROOM 集成到该 POST 方法中?
目前我有一个临时解决方案,即实例化我需要插入数据并使用它的存储库,但这是每次调用该方法时的一次性情况,因为这里绝对没有生命周期,也没有办法有一个足够细化的东西值得拥有(我不知道我需要在 API 中建立一个存储库多久才能证明将其缓存 X 时间是合理的)。
我目前正在工作的示例:
public class Contacts {
public static void POST(Context context, List<Object> list) {
new ContactRepository(context).addContacts(list);
}
}
或者将其用作单例:
public class Contacts {
public static void POST(Context context, List<Object> list) {
ContactRepository.getInstance(context).addContacts(list);
}
}
鉴于生命周期的存在,与 View 相关的 Room 交互一切正常,但在这种情况下,我不知道如何正确执行此操作;这些不仅仅是视图可能调用网络请求的情况 - 然后我只使用 networkboundrequest 或类似的 - 这也可以是服务器发送的数据而应用程序从未请求它,例如更新应用程序相关数据,如用户启动与您的对话 - 该应用程序无法知道这一点,因此它首先来自服务器。
如何正确实施?我还没有找到任何关于这种情况的指南,我担心我可能做错了。
编辑:根据使用的标签和提供的示例,此项目不是 Kotlin,因此请提供任何不依赖于迁移到 Kotlin 以使用其协程或类似 Kotlin 功能的解决方案。