'class property becomes null after viewModel calls it in kotlin

class MainAcitvity

fun roomSetup(){
    setFavouriteDao = FavouriteDatabase.getDatabase(applicationContext).setFavouriteDao()
    repositoryRoom = LorRepository(setFavouriteDao)
    viewModelRoom = ViewModelProvider(this,LorViewModelFactory(repositoryRoom!!)).get(LorViewModel::class.java)
}
override fun onMovieClick(position: Int) {
        roomSetup()
        Toast.makeText(this@MainActivity, "clicked!"+position, Toast.LENGTH_SHORT).show()
        var setFavourite = SetFavourite(movieResponse!!.docs[position].Id.toString(),movieResponse!!.docs[position].name.toString())
        viewModelRoom.addToFavourites(setFavourite)
    }
class ViewModel

fun addToFavourites(setFavourite: SetFavourite){
        viewModelScope.launch(Dispatchers.IO){
             lorRepository.addToFavourites(setFavourite)
        }

    }
class LorRepository( favouriteDao: SetFavouriteDao?) {

    var favouriteDao : SetFavouriteDao
    init {

            this.favouriteDao = favouriteDao!!

    }

    private var lorApi: LORApi.LorCalls? = null
    constructor(lorApi2 : LORApi.LorCalls?, favouriteDao: SetFavouriteDao?) : this(favouriteDao){
        this.lorApi = lorApi2
    }

I have 2 constructors one to initialize room other for initializing retrofit I am Also doubtful about the constructor in Repository. Thoose are made for 2 different purposes, one for initializing room database and other for repository. but everytime I create one object of room/retrofit the second constructor , when called, fills it with null values



Solution 1:[1]

My questions for you are:

Why do you to initialize retrofit and room's dao in a separate constructor?

What is it that you try to achieve?

In your code you only call to initialize dao constructor, therefore lorApi is null.

For your case you wouldn't want to initialize them separately.

Change your code to this:

class LorRepository(private val lorApi : LORApi.LorCalls, private val favouriteDao: SetFavouriteDao)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sovathna Hong