web-dev-qa-db-fra.com

Erreur de gestion RXJava Android avec Kotlin

Salut, je suis nouveau avec RxJava et Kotlin et je perds quelques concepts à ce sujet.

J'ai "api" comme ceci:

interface VehiclesService {
    @GET("/vehicles/")
    fun getVehicles(): Single<List<Vehicle>>
}

Ensuite, je crée le client retrofit, etc. comme ceci:

var retrofit = RetrofitClient().getInstance()
vehiclesAPI = retrofit!!.create(VehiclesService ::class.Java)

enfin je fais l'appel:

private fun fetchData() {
        compositeDisposable.add(vehiclesAPI .getVehicles()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe { vehicles -> displayData(vehicles) }
        )
    }

Et voici où j'ai l'erreur lorsque j'essaie de lancer:

The exception was not handled due to missing onError handler in the subscribe() method call

Je sais que l'erreur est assez explicite. Je sais donc ce qui manque, mais ce que je ne sais pas, c'est COMMENT gérer cette erreur.

J'ai essayé d'ajouter: .doOnError { error -> Log.d("MainClass",error.message) } mais toujours en disant le même message d'erreur.

9
Shudy

Vous pouvez passer un autre lambda à subscribe pour gérer les erreurs pour un flux spécifique comme celui-ci:

    private fun fetchData() {
    compositeDisposable.add(vehiclesAPI .getVehicles()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe( { vehicles -> displayData(vehicles) }, { throwable -> //handle error } )
    )
}

P.S: doOnError et autres Side Effect opérateurs, n'affecteront en aucun cas le flux, ils anticipent simplement les valeurs émises pour les opérations d'effets secondaires comme la journalisation par exemple.

10
Ahmed Ashraf Gamal