Android ViewModelProvider()参数错误

问题描述 投票:0回答:1

我试图从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,以便将其发送到服务器。

android kotlin android-viewmodel viewmodelproviders
1个回答
0
投票

ViewModel实例的作用域是Fragments或Activity(或任何具有类似生命周期的东西),这就是为什么你需要传递一个新的ViewModel实例。ViewModelStoreOwner 到提供者,以从它那里得到一个ViewModel。ViewModel的意义在于它们将存在,直到它们所属的存储被销毁。

视图模型的意义在于,它们将存在于它们所属的商店中,直到它们被摧毁。requireActivity 方法在这里不起作用,因为你不在一个Fragment里面。

这里有一些事情需要考虑。

  • 在这个用例中,你真的需要ViewModel吗?也许你可以只使用一个普通的类,你可以通过调用它的构造函数来创建。
  • 你能不能调用这个Repository 你的ViewModel,然后从那里传入你需要的任何参数?
© www.soinside.com 2019 - 2024. All rights reserved.