Reputation: 8047
I am new to RxJava I want to repeat(3 Seconds) API call using a retrofit. I saw a few answers but I could not figure out how do I achieve this.
I follow this link to repeat calls.
Here is my code
apiInterface = ApiClient.getClient().create(ApiInterface.class);
apiInterface.getTopRatedMovie(API_KEY)
.interval(3, TimeUnit.SECONDS)
.flatMap(n -> apiInterface.getTopRatedMovie(API_KEY))
.repeat()
.subscribe(new Observer<MovieResopnse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(@NonNull MovieResopnse movieResopnse) {
movies = movieResopnse.getResults();
Log.d(TAG, "onResponse: Number of movies received: " + movies.size());
tv_count.setText("Movie: " + count);
count++;
Picasso.get()
.load(IMAGE_URL + movies.get(item).getPosterPath())
.into(image);
title.setText(movies.get(item).getOriginalTitle());
subtitle.setText(movies.get(item).getTitle());
description.setText(movies.get(item).getOverview());
rating.setText("" + movies.get(item).getVoteAverage());
release_date.setText("Release: " + movies.get(item).getReleaseDate());
}
@Override
public void onError(@NonNull Throwable e) {
Log.d(TAG, "onError: " + e.getMessage());
Toast.makeText(MainActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete() {
}
});
Upvotes: 2
Views: 540
Reputation: 8047
Here is how I did the repeat call using retrofit
compositeDisposable.add(Observable.interval(6, TimeUnit.SECONDS)
.flatMap(n -> apiInterface.getTopRatedMovie(API_KEY))
.repeat()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<MovieResopnse>() {
@Override
public void accept(MovieResopnse movieResopnse) throws Exception {
movies = movieResopnse.getResults();
Log.d(TAG, "onResponse: Number of movies received: " + movies.size());
doUIoperation();
}
}, this::onError));
Upvotes: 1