0

I am trying to communicate between MainActivity.kt and sharedviewmodel.kt which is of type viewModel() for WearOS, But when i try to create an instance of the sharedviewmodel.kt in MainActivity.kt by below lines

private lateinit var viewModel: sharedviewmodel
viewModel = ViewModelProvider(this).get(sharedviewmodel::class.java)

when i pass "this" as owner of the ViewModelProvider, i face a error called Required : ViewModelStoreOwner Found : MainActivity

Kindly someone help to solve the issue,

Find the MainActivity.kt and sharedviewmodel.kt below.

import android.app.Activity
import android.os.Bundle
import android.util.Log
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.example.watch7_view_model_example.databinding.ActivityMainBinding

class MainActivity : Activity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel: sharedviewmodel
    var tag = "view_model"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        viewModel = ViewModelProvider(this).get(sharedviewmodel::class.java)
        viewModel.azimuth().observe(this, Observer {
            Log.d(tag,"data")
        })


    }
}

sharedviewmodel.kt

package com.example.watch7_view_model_example

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class sharedviewmodel:ViewModel() {
    private val azimuth: MutableLiveData<String> = MutableLiveData()
    private val elevation: MutableLiveData<String> = MutableLiveData()
    fun azimuth(): LiveData<String> = azimuth
    fun elevation(): LiveData<String> = elevation
    fun azimuth(azimuth_t: String) {
        azimuth.value = azimuth_t
    }
    fun elevation(elevation_t: String) {
        elevation.value = elevation_t
    }
    init {
        // Setting default value
        azimuth.value = "0"
        elevation.value = "0"
    }
}`

0 Answers0