I use Retrofit to get bookmarks from the REST API:
public interface BookmarkService { @GET("/bookmarks") Observable<List<Bookmark>> bookmarks(); }
Now I would like to release every item from this list with a delay.
In Java, I did something similar to, but onCompleted never starts.
private Observable<Bookmark> getBookmarks() { return getBookmarkService().bookmarks() .flatMap(new Func1<List<Bookmark>, Observable<Bookmark>>() { @Override public Observable<Bookmark> call(List<Bookmark> bookmarks) { Observable<Bookmark> resultObservable = Observable.never(); for (int i = 0; i < bookmarks.size(); i++) { List<Bookmark> chunk = bookmarks.subList(i, (i + 1)); resultObservable = resultObservable.mergeWith(Observable.from(chunk).delay(1000 * i, TimeUnit.MILLISECONDS)); } return resultObservable; } }) .observeOn(AndroidSchedulers.mainThread()); }
What am I doing wrong?
Using:
mSwipeRefreshLayout.setRefreshing(true); getBookmarks() .subscribe(new Observer<Bookmark>() { @Override public void onCompleted() { Timber.i("Completed"); mSwipeRefreshLayout.setRefreshing(false); } @Override public void onError(Throwable e) { Timber.i("Error: %s", e.toString()); mSwipeRefreshLayout.setRefreshing(false); } @Override public void onNext(Bookmark bookmark) { Timber.i("Bookmark: %s", bookmark.toString()); mBookmarksAdapter.addItem(bookmark); } });
source share