簡體   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