Rxjavaと組み合わせてRetrofitを使用する利点は何ですか?
質問
バックグラウンドスレッドで既に実行中です。では、なぜ別のバックグラウンドタスクRxJavaが必要なのでしょうか。
最も重要なのは、ネストされたコールバック(callback hell
)を避けることです。
例)Callback hell(Retrofit)
public interface MyService
{
@GET("users")
Call<List<UserModel>> getUser();
@GET("userinfo")
Call<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser().enqueue(new Callback<UserModel>() {
@Override
public void onResponse(Call<UserModel> call, Response<UserModel> response) {
//process UserModel
UserModel data = response.body();
//if you want user infomation from server
service.getUserInfo(data.getId()).enqueue(new Callback<UserInfoModel>(){
//... is callback hell!!
});
}
@Override
public void onFailure(Call<UserModel> call, Throwable t) {
//error handling
}
});
例)コールバック地獄を回避(Retrofit + RxJava)
public interface MyService
{
@GET("users")
Observable<List<UserModel>> getUser();
@GET("userinfo")
Observable<UserInfoModel> getUserInfoById(@Query("id") Integer id);
}
service.getUser()
.flatMapIterable(list -> list)
.flatMap(user -> service.getUserInfoById(user.getId()))
.doOnNext(userinfo -> saveUserInfo(userinfo)).subscribe();
RxJava
を使用している場合は、Observable
を使用してこの状況を回避できます。
追加
上記のコードスニペットはほんの一例です。
実際、RxJava
には、さらに多くのobserve pattern
関連機能が含まれています。
追加-イベント駆動型プログラミングの利点Android(RxJava)
ほとんどのAndroid application
は、ユーザーまたはデータinteraction
に基づいて構築されています。 (たとえば、対話が発生するとGUIが更新されます)。したがって、これらをset of events
と見なし、これに基づいてアプリケーションを設計および構築することは、非常に直感的であり、内部および外部のイベントに適しています。
これらの利点を理解するには、まずコードベースがReactive Extensionsを採用することがどれほど有益であるかを理解する必要があります。
構成可能性と変換
スレッド化と非同期操作
Rxライブラリ
これら以外にも他の利点がありますが、事後対応することは非常に有益であることがわかります。リクエストは、ストリームの操作を学び、コードベースに徐々にストリームロジックを導入するための非常に良い出発点です。
代替品ではありません。 RxJavaとRetrofitは完全に一致しているため、そもそもRetrofitでRxJavaがネイティブでサポートされています。