¿Cómo puedo obtener el error de ViewModel en la Llamada a la API en la Actividad?
Cuando yo uso el ViewModel en Android, he utilizado dos MutableLiveData objetos en mi clase ViewModel.
var imageList: MutableLiveData<List<HitsItem>> = MutableLiveData()
var errorMessage: MutableLiveData<String> = MutableLiveData()
Lo que yo quiero es que cuando se produce un error en la Llamada a la API de errorMessage se establece, de manera similar, cuando la llamada a la API es un éxito, imageList se establece.
¿Cómo puedo consultar la API es un éxito o no en la Actividad, quiero un Brindis mensaje de error en Actividad, cuando la Llamada a la API no está en el éxito..?
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
}
La actividad
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([email protected],imageList)
rv_images.adapter = adapter
}
}
})
}

Por lo general, no trabajo con el ids en Django, pero con los objetos en sí. Si usted tiene una lista de objetos que desea establecer como el de muchos-a-muchos (relación de asegurarse de que las viejas relaciones se eliminan), el uso de set()
. E. g. publication.articles.set([article1, article2])
.
Consulte esta página para obtener más ejemplos sobre cómo trabajar con muchos-a-muchos de relaciones.
Si usted tiene un formulario que permite a los usuarios seleccionar los objetos a elegir, mediante un ModelMultipleChoiceField
devolverá la lista de objetos en forma de cleaned_data
, en lugar de los identificadores.
Vea otras preguntas sobre etiquetas android mvvm rx-java2 rx-android android-viewmodel