¿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
            }
        }
    })


}
0
2019-09-18 06:29:47
fuente
1 respuestas

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.

+0
2019-09-18 09:55:54

Vea otras preguntas sobre etiquetas