Как использовать метод startWith в RxJava при использовании Retrofit - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь передать состояние загрузки, успеха и ошибки при использовании Retrofit с RxJava. Мой вывод обернут в Response из пакета Retrofit и хотел бы использовать метод startWith из RxJava для передачи статуса loading из класса Resource. Когда я добавляю startWith код не работает и имеет синтаксическую ошибку.

Модифицированный интерфейс:

@POST
@FormUrlEncoded
Flowable<Response<ResponseMobileGetAccess>> getAccess(@Url String url, @FieldMap HashMap<String, Object> requestModel);

Место, где я выполняю этот метод с помощью RxJava:

 public Flowable<Resource<ResponseMobileGetAccess>> registerMobile(
        @NonNull String username) {

    HashMap<String, Object> body = new HashMap<>();
    body.put("param1", ACTION_MOBILE_GET_ACCESS);

    return Flowable
            .defer(() -> localAccountMobileApiService.getAccess(ACTION_MOBILE_GET_ACCESS, body)
            .map(response -> {
                if (responseMobileGetAccessResponse.isSuccessful()) {
                    return Resource.success(responseMobileGetAccessResponse.body());
                } else {
                    return Resource.error();
                }
            })).startWith(Resource.loading());
}

Заранее спасибо

1 Ответ

0 голосов
/ 05 мая 2018

Я только что изменил эти коды на:

 public Flowable<Resource<ResponseMobileGetAccess>> registerMobile(
        @NonNull String username) {

    HashMap<String, Object> body = new HashMap<>();
    body.put("param1", ACTION_MOBILE_GET_ACCESS);

    Flowable<Resource<ResponseMobileGetAccess>> defer = Flowable
            .defer(() -> localAccountMobileApiService.getAccess(ACCOUNT_MOBILE_URL, body)
                    .map(response -> {

                        if (response.isSuccessful()) {
                            ResponseMobileGetAccess data = response.body();

                            if (data != null) {

                                if (data.getStatusCode() > 0) {
                                    return Resource.success(data);
                                } else {
                                    return Resource.serverFailed(data.getStatusText());
                                }

                            } else {
                                return Resource.httpFailed();
                            }

                        } else {
                            return Resource.httpFailed();
                        }

                    }));

    return defer.startWith(Resource.loading());
}

Хотя я не уверен, что это стандартный способ, он работает.

...