Я занимаюсь разработкой приложения для Android с использованием модификаций и rxjava. В основном у меня есть веб-сервис (themoviedb), к которому я подключаюсь для загрузки / синхронизации данных. Проблема, с которой я сталкиваюсь, обычно заключается в том, что я получаю ошибку 429 слишком много запросов при попытке загрузить слишком много данных эпизодов. Каждый запрос должен быть отложен на 500 миллисекунд.
Мой код:
public void downloadSeason(int seasonNumber)
{
Log.d(TAG,"adding a season"+seasonNumber);
int delay = 500;
Observable<SeriesSeasonResponse> seasonSpecs = mSeasonService.getSeasonSpecs(seriesEntity.getId(), seasonNumber,
Consts.DEFAULT_LANGUAGE, Consts.API_KEY_V3);
seasonSpecs.subscribeOn(Schedulers.io()).observeOn(Schedulers.computation())
.delay(delay, TimeUnit.MILLISECONDS)
.subscribe(new Observer<SeriesSeasonResponse>()
{
@Override
public void onComplete()
{
}
@Override
public void onSubscribe(Disposable d)
{
}
@Override
public void onNext(SeriesSeasonResponse seriesSeasonResponse)
{
addSeasonToDataBase(seriesEntity.getName(), seriesSeasonResponse);
Observable.range(1, seriesSeasonResponse.getEpisodes().size())
.subscribe(new Observer<Integer>()
{
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Log.d(TAG,"adding season"+seriesSeasonResponse.getSeasonNumber()+" episode"+integer);
EpisodeInSeason currentEpisode = seriesSeasonResponse.getEpisodes().get(integer);
Observable<EpisodeSpecsResponse> episodeSpecs = mEpisodeSpecsService.getEpisodeSpecs(seriesEntity.getId(), currentEpisode.getSeasonNumber(), currentEpisode.getEpisodeNumber(), Consts.DEFAULT_LANGUAGE, Consts.API_KEY_V3);
episodeSpecs
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.delay(500, TimeUnit.MILLISECONDS)
.subscribe(new Observer<EpisodeSpecsResponse>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(EpisodeSpecsResponse episodeSpecsResponse) {
addEpisodeToDataBase(seriesEntity.getId(),episodeSpecsResponse);
Log.d(TAG,String.format("added "+"S%02dE%02d",episodeSpecsResponse.getSeasonNumber(),episodeSpecsResponse.getEpisodeNumber()));
}
@Override
public void onError(Throwable e) {
Log.d(TAG, e.getMessage());
}
@Override
public void onComplete() {
}
});
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "Episode error= "+e.getMessage());
}
@Override
public void onComplete() {
}
});
}
@Override
public void onError(Throwable e)
{
Log.e(TAG, "Season error= "+e.getMessage());
}
});
}