Skip to content

Instantly share code, notes, and snippets.

@ramonrabello
Last active February 11, 2019 17:08
Show Gist options
  • Save ramonrabello/5372320e2cbf4252cd43da53cd88e3d9 to your computer and use it in GitHub Desktop.
Save ramonrabello/5372320e2cbf4252cd43da53cd88e3d9 to your computer and use it in GitHub Desktop.
Callback Hell with nested Retrofit calls
peopleRepository.loadPeopleAsync().enqueue(object: Callback<PeopleResponse> {
override fun onFailure(call: Call<PeopleResponse>, t: Throwable) { }
override fun onResponse(call: Call<PeopleResponse>, response: Response<PeopleResponse>) {
if (response.isSuccessful) {
val result = response.body()?.results
result?.let { characters ->
characters.forEach { character ->
peopleRepository.loadPerson(character.url).enqueue(object: Callback<PersonResponse>{
override fun onFailure(call: Call<PersonResponse>, t: Throwable) {}
override fun onResponse(call: Call<PersonResponse>, response: Response<PersonResponse>) {
if (response.isSuccessful) {
val filmUrls = response.body()?.films
filmUrls?.let {
filmUrls.forEach { url ->
peopleRepository.loadFilm(url).enqueue(object: Callback<FilmResponse>{
override fun onFailure(call: Call<FilmResponse>, t: Throwable) { }
override fun onResponse(call: Call<FilmResponse>, response: Response<FilmResponse>) {
if (response.isSuccessful){
val film = response.body()
film?.let { filmList.add(film) }
} else {
errorMessageLiveData.postValue(R.string.people_list_loading_error)
}
}
})
}
filmListLiveData.postValue(filmList)
}
} else {
errorMessageLiveData.postValue(R.string.people_list_loading_error)
}
}
})
}
}
} else {
errorMessageLiveData.postValue(R.string.people_list_loading_error)
}
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment