如何在 Kotlin 中使用 MutableLiveData?

Par*_*ane 0 android mvvm kotlin retrofit android-livedata

我在 Kotlin 中使用 MVVM 架构。我创建了一个 ViewModel 和 Repository 类。在 Repository 类中,我使用改造从 API 获取数据。我将该数据存储到我的 MutableLiveData 对象中,但是在调试对象时,即使我的 response.body 不为 null,该对象也始终显示为 null。

我对 Kotlin 很陌生。请帮忙..

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
    }
}
Run Code Online (Sandbox Code Playgroud)

主视图模型.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
    }
}
Run Code Online (Sandbox Code Playgroud)

主要活动

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


        })

    }
}
Run Code Online (Sandbox Code Playgroud)

Alp*_*a 1 6

您尚未初始化 itemMutableList。这就是为什么你得到空值。

private  var itemMutableList: MutableLiveData<List<ItemItem>> = MutableLiveData()
Run Code Online (Sandbox Code Playgroud)

现在在您的响应函数中为其赋值:

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

               itemMutableList.postValue(itemItem)
            }
Run Code Online (Sandbox Code Playgroud)