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)
您尚未初始化 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)
| 归档时间: |
|
| 查看次数: |
3607 次 |
| 最近记录: |