Arpit Patel
Arpit Patel

Reputation: 8047

Repeat api call using retrofit and rxJava

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

Answers (1)

Arpit Patel
Arpit Patel

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

Related Questions