Retrofit 2 и RXJava как правильно обработать исключения?

Здравствуйте.

Есть сайт, где авторизация происходит путем Post запроса с передачей логина и пароля.
Правильно ли так обрабатывать исключения в связке Retrofit и RXJava:
apiService.login возвращает Observable ResponseBody

apiService.login(login, pass)
                        .map(responseBody -> {
                            try {
                                return responseBody.string();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            return "";
                        })
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(s -> System.out.println(s));


интерфейс
@FormUrlEncoded
    @POST("/login.php")
    Observable<ResponseBody> login(
            @Field("login") String login,
            @Field("pass") String pass);


public SiteService(Context context) {

        cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));

        okHttpClient = new OkHttpClient.Builder()
                .cookieJar(cookieJar)
                .build();

        client = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();


        apiService = client.create(SiteApi.class);
    }
    public Observable<ResponseBody> login(String login, String pass){

        return apiService.login(login, pass);
    }

Спасибо.
  • Вопрос задан
  • 1524 просмотра
Решения вопроса 1
@YuryBorodkin
Android dev
неа, неправильно. Добавь onError() после вызова login. Почитать можно тут
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@davidnum95
Подписчику ошибка возвращается в метод OnError(Exception throwable), соотвественно:
apiService.login(login, pass)
                        .map(responseBody -> {
                            try {
                                return responseBody.string();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            return "";
                        })
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(s -> System.out.println(s), throwable -> {
                                        // тут обработка ошибок
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы