Подтвердить что ты не робот

Почему RxJava часто используется с Retrofit?

В чем преимущество использования Retrofit в сочетании с Rxjava?

4b9b3361

Ответ 1

Вопрос

Дооснащение Уже в фоновом режиме. Тогда зачем нужна другая фоновая задача RxJava?

Я думаю, что наиболее важно, избегайте вложенных обратных вызовов (callback hell).

, например) Callback hell (Дооснащение)

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, а проектирование и создание приложения на основе этого очень интуитивно понятное и подходящее для внутренних и внешних событий.

Ответ 2

Чтобы понять эти преимущества, вы должны сначала понять, насколько полезно для вашей кодовой базы принимать реактивные расширения.

  • Составляемость и преобразование

    • Потоки предлагают очень удобный интерфейс. Он позволяет выполнять операции преобразования (по структуре и времени события) и в основном взаимодействовать (например, создавать зависимости или использовать результат/ошибку из другого потока) между различными потоками. Хотя вы можете сделать это с помощью обратных вызовов, если вы попытаетесь реализовать более сложный прецедент, который может быть даже простым, как 3 запроса, код быстро потеряет свою читаемость. С другой стороны, Rx позволяет реализовать сложные очень сложные сценарии и по-прежнему выглядят гладкими.
  • Threading и асинхронные операции

    • Rx дает вам очень подробный контроль над тем, какие потоки будут использоваться для выполнения работы в разных точках потока. Чтобы указать здесь контраст, базовый подход вызова, используемый в Retrofit, предназначен только для планирования рабочих потоков и перенаправления результата обратно в вызывающий поток. Когда объявляется потоком, модификация не обрабатывает потоки и оставляет его только вам, что дает вам контроль.
  • Rx-библиотеки

    • Как вы уже видели, существует множество библиотек, которые используют Reactive extensions и реализуют различные функции как поток. Вы можете легко воспользоваться ими при работе с вашими запросами.

Есть и другие преимущества, но вы можете сказать, что очень полезно идти реактивно. Запросы - очень хорошая отправная точка для изучения работы с потоками и постепенного внедрения в вашу кодовую базу все больше логики потока.

Это не подстановка. RxJava и Retrofit - идеальное совпадение, поэтому в первую очередь есть поддержка в Retrofit.