Skip to content

Instantly share code, notes, and snippets.

@mitchtabian
Created May 23, 2019 17:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitchtabian/1a9e6d0d7f5eb3bfc4306e0ba850a98e to your computer and use it in GitHub Desktop.
Save mitchtabian/1a9e6d0d7f5eb3bfc4306e0ba850a98e to your computer and use it in GitHub Desktop.
class MovieRepository @Inject
constructor(var apiService: ApiService) {
fun fetchDiscoverMovies(page: Int): LiveData<Resource<DiscoverMovieResponse>> {
return LiveDataReactiveStreams.fromPublisher(
apiService.fetchDiscoverMovie(page) // returns Flowable<DiscoverMovieResponse>
.subscribeOn(Schedulers.io())
.map { d: DiscoverMovieResponse -> Resource.success(d) }
.onErrorReturn { e -> Resource.error(e.message, null) }
)
}
}
class MainViewModel @Inject
constructor(private val movieRepository: MovieRepository) : ViewModel() {
var discoverMovieLiveData: MediatorLiveData<Resource<DiscoverMovieResponse>> = MediatorLiveData()
fun observeDiscoverMovie(): LiveData<Resource<DiscoverMovieResponse>> {
return discoverMovieLiveData
}
fun fetchDiscoverMovies(page: Int) {
val source = movieRepository.fetchDiscoverMovies(page)
discoverMovieLiveData.addSource(source, Observer {
discoverMovieLiveData.value = it
discoverMovieLiveData.removeSource(source)
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment