【发布时间】:2020-01-18 23:01:14
【问题描述】:
当我在 Android 中使用 ViewModel 时,我在 ViewModel 类中使用了两个 MutableLiveData 对象。
var imageList: MutableLiveData<List<HitsItem>> = MutableLiveData()
var errorMessage: MutableLiveData<String> = MutableLiveData()
我想要的是每当API调用发生错误时设置errorMessage,同样,当API调用成功时,imageList被设置。
如何在 Activity 中检查 API 是否成功,当 API 调用不成功时,我想在 Activity 中显示 Toast 错误消息..?
ImageViewModel.kt
fun getImages(): LiveData<List<HitsItem>> {
imageList = MutableLiveData()
loadImages()
return imageList
}
fun loadImages() {
val api = PexelClient.getClient().create(ApiInterface::class.java)
val imageObservable = api.images
imageObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map({ result -> result })
.subscribe(
Consumer<ImageModel> { this.handleResults(it) },
Consumer<Throwable> { this.handleError(it) }
)
}
private fun handleResults(list: ImageModel) {
imageList.value = list.hits
errorMessage.value = null
}
private fun handleError(t: Throwable) {
imageList.value = null
errorMessage.value = t.message
}
活动
lateinit var imagesViewModel:ImagesViewModel
lateinit var adapter:ImageAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_mvvm_rx_retrofit)
rv_images.setHasFixedSize(true)
rv_images.layoutManager = LinearLayoutManager(this)
imagesViewModel = ViewModelProviders.of(this).get(ImagesViewModel::class.java)
imagesViewModel.getImages().observe(this, object : Observer<List<HitsItem>> {
override fun onChanged(imageList: List<HitsItem>?) {
if(imageList != null){
adapter = ImageAdapter(this@MvvmRxRetrofit,imageList)
rv_images.adapter = adapter
}
}
})
}
【问题讨论】:
-
make handleResults, handleError in methos in activity 而不是 viewmodel
-
不过,我如何在 Activity 中同时获得结果、错误和列表
-
1.不要在
getImages()函数中执行imageList = MutableLiveData()。 2. 使 livedatas 为 val 而不是 var。 3. 在您的活动中也观察errorMessage,就像您观察imageList到getImages()一样。 4.当你有数据errorMessage.value = null时,不要将null发送到错误。当您遇到错误imageList.value = null时,不要将 null 发送到数据。删除这些 -
谢谢,但你能告诉我如何通过示例代码在 Activity 中获取 errorMessage
标签: android mvvm rx-java2 rx-android android-viewmodel