Tôi có 2 API mà tôi muốn yêu cầu theo thứ tự và lưu trữ dữ liệu của chúng trong SQLite.Yêu cầu chuỗi trong Retrofit + RxJava
Trước tiên, tôi muốn yêu cầu API A
và lưu trữ dữ liệu trong bảng SQL a
. Sau đó, yêu cầu API B
và lưu trữ dữ liệu trong bảng b
và một số dữ liệu trong bảng a_b
. Các dữ liệu được lưu trữ trong a_b
là từ yêu cầu B
một mình.
Làm cách nào tôi có thể thực hiện việc này bằng RxJava. Tôi đọc ở đâu đó về việc sử dụng flatMap cho điều này, một cái gì đó như thế này
apiService.A()
// store in DB here? How? maybe use map()?
.flatMap(modelA -> {
// or maybe store modelA in DB here?
return apiService.B().map(modelB -> {
storeInDB()l // store B here ?
return modelB;
});
});
Nếu tôi không sử dụng hàm lambda, điều này sẽ trông xấu xí như cuộc gọi lồng nhau bình thường. Đây có phải là cách tốt hơn để làm điều đó không?
Tôi không biết về các toán tử 'do' của Rx. Sau khi đọc tài liệu của nó, không phải là 'doOnComplete' một chức năng tốt hơn cho điều này? – Sourabh
@Sourabh nó phụ thuộc vào 'Observable' của bạn. Nếu 'onComplete' được gọi sau khi một cuộc gọi thành công từ api, thì có. Nếu 'Observable' của bạn có thể phát ra nhiều sự kiện, thì bạn nên vào' doOnNext'. Trong trường hợp của bạn ('Retrofit') sử dụng' doOnNext' và 'doOnComplete' sẽ có cùng kết quả, nhưng thực sự' doOnComplete' có thể trực quan hơn một chút (tôi đã sử dụng 'doOnNext' trong thói quen thuần túy). –
Ý tôi là, sử dụng 'doOnComplete' thay vì' flatMap' – Sourabh