繁体   English   中英

Android ViewModelProvider() 参数错误

[英]Android ViewModelProvider() parameter error

我试图从 SharedViewModel class 中获取一个值,但是当我传递 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 实例的范围是片段或活动(或任何具有类似生命周期的东西),这就是为什么您需要将ViewModelStoreOwner传递给提供者以从中获取 ViewModel。 ViewModel 的意义在于它们将一直存在,直到它们所属的商店被销毁。

requireActivity方法在这里不起作用,因为您不在 Fragment 中。

这里需要考虑的一些事情:

  • 在这个用例中你真的需要 ViewModel 吗? 您是否可以仅使用可以通过调用其构造函数来创建的常规 class ?
  • 能从你的 ViewModel 调用这个存储库,并从那里传递你需要的任何参数吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM