Saya memiliki dua permintaan jaringan.

fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>

Yang ingin saya lakukan adalah...

  1. Tampilkan layar pemuatan saat dimulai. kedua permintaan tersebut harus bekerja secara independen.
  2. Saat setiap permintaan selesai, hasil yang ditampilkan diperbarui.
  3. Sembunyikan layar pemuatan saat semua permintaan dihentikan.

Saya memiliki fungsi yang menangani halaman pemuatan:

fun showLoadingScreen()
fun hideLoadingScreen()

Dan memanipulasi tampilan:

fun showPostDetails(post)
fun showComments(comments)

Saya sudah mencoba cara ini - berlangganan masing-masing, dan juga berlangganan gabungan:

postDetail = getPostDetail(postId)
getComments = getComments(postId)

postDetail.subscribe()
getComments.subscribe()

Single.merge(postDetail, getComments).subscribe()

Dalam hal ini, itu membuat beberapa permintaan daripada sekali.

Apa pendekatan terbaik untuk masalah seperti ini? Saya dapat menggunakan CountDownLatch untuk menghitung penyelesaian setiap permintaan, tetapi apakah ada solusi keturunan lain untuk ini di RxJava?

1
Tura 19 Maret 2019, 04:35

1 menjawab

Jawaban Terbaik

Anda dapat mencoba menggunakan doOnSuccess

postDetail = getPostDetail(postId).doOnSuccess { showPostDetails(it) }
getComments = getComments(postId).doOnSuccess { showComments(it) }

Kemudian gabungkan saja

Single.merge(postDetail, getComments)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe {
        showLoadingScreen()
    }
    .doOnTerminate {
        hideLoadingScreen()
    }
    .subscribe()

1
Bach Vu 19 Maret 2019, 03:09