我正试图从SharedViewModel类中获取一个值,但当我传递requireActivity((时,ViewModelProvider((给出了一个参数错误,尽管相同的初始化和赋值在我的片段中有效。
它要求传递"ViewModelStoreOwner"。
class CourseRepository(val app: Application) {
private var viewModel: SharedViewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
val courseData = MutableLiveData<List<Course>>()
init {
CoroutineScope(Dispatchers.IO).launch {
callWebService()
}
}
@WorkerThread
suspend fun callWebService() {
if (Utility.networkAvailable(app)) {
val retrofit = Retrofit.Builder().baseUrl(WEB_SERVICE_URL).addConverterFactory(MoshiConverterFactory.create()).build()
val service = retrofit.create(CourseService::class.java)
val serviceData = service.getCourseData(viewModel.pathName).body() ?: emptyList()
courseData.postValue(serviceData)
}
}
}
这里ViewModel的目的是因为我存储了所选RecyclerView项目的Id,以便将其发送到服务器
ViewModel实例的作用域是Fragments或Activities(或任何具有类似生命周期的东西(,这就是为什么您需要将ViewModelStoreOwner
传递给提供程序才能从中获取ViewModel。ViewModel的意义在于,它们将一直存在,直到它们所属的存储被销毁。
requireActivity
方法在这里不起作用,因为您不在Fragment内部。
这里需要考虑的一些事情:
- 在这个用例中,您真的需要ViewModel吗?您是否可以只使用一个可以通过调用其构造函数来创建的常规类
- 您能否从ViewModel的中调用此存储库,并从中传递您需要的任何参数