diff --git a/app/src/main/java/com/codingwithmitch/rxjavaflatmapexample/MainActivity.java b/app/src/main/java/com/codingwithmitch/rxjavaflatmapexample/MainActivity.java index 8120e60..0b814ba 100644 --- a/app/src/main/java/com/codingwithmitch/rxjavaflatmapexample/MainActivity.java +++ b/app/src/main/java/com/codingwithmitch/rxjavaflatmapexample/MainActivity.java @@ -3,6 +3,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.Observer; @@ -13,6 +14,7 @@ import io.reactivex.functions.Predicate; import io.reactivex.schedulers.Schedulers; + import android.os.Bundle; import android.util.Log; @@ -23,6 +25,7 @@ import java.util.List; import java.util.Random; + public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @@ -43,12 +46,13 @@ protected void onCreate(Bundle savedInstanceState) { initRecyclerView(); + getPostsObservable() .subscribeOn(Schedulers.io()) - .flatMap(new Function>() { + .concatMap(new Function>() { @Override public ObservableSource apply(Post post) throws Exception { - return getCommentsObservable(post); + return getCommentsObservable(post); // return an updated Observable with comments } }) .observeOn(AndroidSchedulers.mainThread()) @@ -60,6 +64,7 @@ public void onSubscribe(Disposable d) { @Override public void onNext(Post post) { + // update the post in the list updatePost(post); } @@ -70,21 +75,7 @@ public void onError(Throwable e) { @Override public void onComplete() { - } - }); - } - private Observable getPostsObservable(){ - return ServiceGenerator.getRequestApi() - .getPosts() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .flatMap(new Function, ObservableSource>() { - @Override - public ObservableSource apply(final List posts) throws Exception { - adapter.setPosts(posts); - return Observable.fromIterable(posts) - .subscribeOn(Schedulers.io()); } }); } @@ -93,6 +84,7 @@ private void updatePost(Post post){ adapter.updatePost(post); } + private Observable getCommentsObservable(final Post post){ return ServiceGenerator.getRequestApi() .getComments(post.getId()) @@ -100,24 +92,42 @@ private Observable getCommentsObservable(final Post post){ @Override public Post apply(List comments) throws Exception { - int delay = ((new Random()).nextInt(5) + 1) * 1000; // sleep thread for x ms + int delay = ((new Random()).nextInt(5) + 1) * 1000; Thread.sleep(delay); - Log.d(TAG, "apply: sleeping thread " + Thread.currentThread().getName() + " for " + String.valueOf(delay)+ "ms"); + Log.d(TAG, "apply: sleeping thread: " + Thread.currentThread().getName() + " for " + + String.valueOf(delay) + " ms"); post.setComments(comments); + return post; } }) .subscribeOn(Schedulers.io()); + } + + private Observable getPostsObservable(){ + return ServiceGenerator.getRequestApi() + .getPosts() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .flatMap(new Function, ObservableSource>() { + @Override + public ObservableSource apply(List posts) throws Exception { + adapter.setPosts(posts); + return Observable.fromIterable(posts) + .subscribeOn(Schedulers.io()); + } + }); } + private void initRecyclerView(){ adapter = new RecyclerAdapter(); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); } - + @Override protected void onDestroy() { super.onDestroy();