214 похожих чатов

По фану допиливаю тестовое, подскажите, как правильно обработать ретрофитовские ошибки

типо 500, 404, ...? Или где это глянуть можно, чтобы не было особых заморочек?

Сейчас у меня такая цепь для данных:
View -> VM -> Interactor -> Repository - > (Retrofit/DB/...)

В репозитории есть метод getEmployees(), который либо возвращает интерактору данные из кеша(лист Employee), либо, если кеш пустой, идёт в сеть посредством метода loadEmployees(), получает ответ, кеширует результаты и после этого возвращает интерактору данные.
Я не могу корректно обработать ситуацию, когда из сети пришла ошибка. Раньше я об этом вообще не думал, а сейчас упало Api, а за ним и апка.

Из сети приходит ResponseResult, который я тупо оборачиваю в try/catch, чтобы не упасть. Первое что я попробовал сделать - добавить в ResponseResult поле errorCode и сеттить его внутри catch в случае ошибки. Только сейчас репозиторий отдаёт лист Employee, и его нужно как - то научить передавать ошибку наверх.

Как вариант - передавать что - то вида List<ErrorCode, List<Employee>>.
Или вообще создать свою модель, типа RepositoryResult, которая будет собираться из ResponseResult, в котором будет errorCode и List<Employee>, возвращать эту модель интерактору, маппить её и снова думать над тем как и в каком виде передать ошибку ещё выше.

В теории это будет работать, но вариант "сеттить какое - то поле в случае ошибки, и передавать данные наверх, пока они не дойдут presenter слоя" кажется мне какой - то дичью, очень много мороки, наверное должен быть вариант правильнее.

Как правильно решить проблему?

*Вот код репозитория, я если что претендую на Джуна, так шо не баньте, я играю как умею ((

https://github.com/KirstenLy/TestTask/blob/master/app/src/main/java/com/example/testtask/data/repository/EmployeeRepository.kt

1 ответов

17 просмотров

1. Правильнее всего будет отдавать свою модель ResponseResult. В котлине еще можно отдавать sealed class https://kotlinlang.org/docs/reference/sealed-classes.html С запечатанными классами легче будет работать в презенторе и интеракторе 2. Если это тестовое то почитай про SOLID. У тебя реализация не спрятана за интерфейсы, это всегда сильно бросается в глаза 3. Статический метод для получения контекста это очень плохо. Не используй App.get() Либо прокидывай зависимостью либо добывай из фрагмента или активити 4. Зачем тебе SharedViewModel если итак у тебя репозиторий во первых кеширует данные, а во вторых в di заведен как @Singletone

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта