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.
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.