【发布时间】:2021-03-16 15:39:12
【问题描述】:
我正在为我的应用程序实现离线模式,我的计划是将本地数据库放在 UI 和 API 请求之间。
我有这个片段和他的带有这个初始化块的视图模型:
init {
viewModelScope.launch(Dispatchers.IO) {
// context required here
loadVehicles()
}
}
现在,在 loadVehicles 中,我想检查我是否在线,如果在线,我将简单地调用 API 以更新我的本地数据库,以防有任何新内容。
fun isOnline(context: Context): Boolean {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (connectivityManager != null) {
val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (capabilities != null) {
return true
}
}
return false
}
这是我能找到的用于测试我是否在线的最简单的代码,并且此函数需要上下文,而该上下文无法从视图模型的 init 块中访问。
如果有什么我可以改进的,期待听到其他关于做事的建议。
【问题讨论】:
-
我可以在 ViewModel 的 init 块中获取上下文吗? 从
AndroidViewModel派生你的 ViewModel 吗? -
这是标题建议还是什么?我很困惑。所以你要添加“从 AndroidViewModel 派生”,嗯,是的,肯定是......如果那对你来说是模棱两可的
-
然后将初始化代码移动到构造函数
-
还有为什么上下文是不可访问的? It should be
-
我不能,它必须是协程,我正在向本地数据库提出改造和空间的请求,以及从 API 获取新数据,所有这些都是暂停的函数。
标签: android kotlin mvvm dagger-2