简体   繁体   中英

How to use MutableLiveData in Kotlin?

I'm using an MVVM architecture in Kotlin. I have created a ViewModel and Repository class. In Repository class I'm fetching data from API using a retrofit. I'm storing that data into my MutableLiveData object, but while debugging the object is always showing null even if my response.body is not null.

I'm very new to Kotlin. Please help..

ItemRepository.kt

   class ItemRepository {

    companion object{
        private var instance: ItemRepository? = null
        private  var itemMutableList: MutableLiveData<List<ItemItem>>? = null

         fun getinstance(): ItemRepository {
            if (instance == null){
                instance = ItemRepository()
            }

            return instance as ItemRepository
        }
    }

    fun getItems() :MutableLiveData<List<ItemItem>>?{
        var itemCall : Call<List<ItemItem>?> = ApiClient.getInstance()!!.getApi()!!.getIteams();

        itemCall.enqueue(object : Callback<List<ItemItem>?> {
            override fun onFailure(call: Call<List<ItemItem>?>, t: Throwable) {

            }

            override fun onResponse(call: Call<List<ItemItem>?>, response: Response<List<ItemItem>?>) {
                var itemItem = response.body()

               itemMutableList?.value = itemItem
                itemMutableList // showing null value
            }

        })
        return itemMutableList
    }
}

MainViewModel.kt

 class MainViewModel : ViewModel {

    private var itemMutableList : MutableLiveData<List<ItemItem>>? = null
    private var itemRepository: ItemRepository? = null


    constructor()
    {
        if(itemMutableList != null){
            return
        }
        itemRepository = ItemRepository.getinstance()
        itemMutableList = itemRepository?.getItems()
    }

    fun getResultList() : MutableLiveData<List<ItemItem>>? {

        if(itemMutableList != null)
        {
            itemMutableList
        }
        return  itemMutableList
    }
}

MainActivity

  class MainActivity : AppCompatActivity() {

    private var mainViewModel: MainViewModel? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

        mainViewModel?.getResultList()?.observe(this, Observer { itmList ->


        })

    }
}

You have not initialized itemMutableList. That is why you are getting null.

private  var itemMutableList: MutableLiveData<List<ItemItem>> = MutableLiveData()

Now in your response function assign value to it:

override fun onResponse(call: Call<List<ItemItem>?>, response: Response<List<ItemItem>?>) {
                var itemItem = response.body()

               itemMutableList.postValue(itemItem)
            }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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