Size: a a a

Android Architecture

2020 June 26

В

Вася in Android Architecture
error приходит на латиннице и без http кода. Мне нужно еще локализовать ошибку и добавить код )
источник

В

Вася in Android Architecture
т.е сделать мап обьекта  и вернуть модель либо ошибку (которую локализую самостоятельно и добавлю код в зависимости от текста ))
источник

В

Вася in Android Architecture
поидее  маппить обьект с дата в домен  модель  нужно в дата слое
источник

S

SE in Android Architecture
QMan
1. Исключение ловить в репозитории
2. Сделать обертку, которая будет возвращать и и сключение и данные из кеша. Почему только при исключении данные из кеша - непонятно. Я всегда пропускаю данные через кеш и возвращаю кеш.
Я передаю кэш, если время валидности кэша не истекло и пользователь не запросил новые данные. Если пользователь запросил новый данные, то я иду в сеть, после успешного ответа делаю запись в файловый кэш и потом передаю его дальше. Если запрос в сеть возвращает ошибку, то я передаю данные из кэша и саму ошибку.
Тут мне надо сделать так, чтобы если произойдёт ошибка при запросе в сеть(только если серверная ошибка), то следующий час я должен показывать данные с кэш. Получается я не должен делать запрос в сеть и не показывать, что произошла серверная ошибка.
источник

S

SE in Android Architecture
QMan
А если кешируете не все данные, то что в этом случае ?
Я кэширую все данные всегда.
источник

Q

QMan in Android Architecture
SE
Я передаю кэш, если время валидности кэша не истекло и пользователь не запросил новые данные. Если пользователь запросил новый данные, то я иду в сеть, после успешного ответа делаю запись в файловый кэш и потом передаю его дальше. Если запрос в сеть возвращает ошибку, то я передаю данные из кэша и саму ошибку.
Тут мне надо сделать так, чтобы если произойдёт ошибка при запросе в сеть(только если серверная ошибка), то следующий час я должен показывать данные с кэш. Получается я не должен делать запрос в сеть и не показывать, что произошла серверная ошибка.
Мне просто непонятен момент с часовым интервалом
источник

Q

QMan in Android Architecture
Тогда реализуйте еще один класс, что-то а-ля NetworkExceptionTimeOut и по нему сверяйтесь, isExpired -> идем в сеть
источник

Q

QMan in Android Architecture
но я бы, всё же, предупреждал пользователя что данные возможно устарели
источник

S

SE in Android Architecture
QMan
Мне просто непонятен момент с часовым интервалом
У меня в условии ТЗ так написано. У нас сервак часто падает последние время из-за этого. А там пользователей около 1 млн.
источник

S

SE in Android Architecture
QMan
Тогда реализуйте еще один класс, что-то а-ля NetworkExceptionTimeOut и по нему сверяйтесь, isExpired -> идем в сеть
Я думаю в класс который используется для получение данных из сети и из кэша(в данным случаи используется один и тот же класс), там объявить поля isLastTimeServerError. Где будет храниться последние время, когда произошла серверная ошибка. А самом Repository я буду проверять, если произойдёт серверная ошибка, то я поставлю отметку в этом поле и дальнейшем буду отправлять данные из кэша. Даже в первом случаи, когда произойдёт ошибка я не буду отправлять саму ошибку. Тут меня больше смущает, что я делаю проверку, какой тип ошибки сервера происходит в Repository и кроме этого получается, что Repository управляет отправлять ошибку пользователю или нет?
источник

S

SE in Android Architecture
QMan
но я бы, всё же, предупреждал пользователя что данные возможно устарели
После истечение часа, я буду показывать ошибку.
источник

Q

QMan in Android Architecture
Так ты не следуешь принципам SOLID, когда всё лепишь в один класс
источник

S

SE in Android Architecture
QMan
Так ты не следуешь принципам SOLID, когда всё лепишь в один класс
Получается даже то, что вы сказали создать NetworkExceptionTimeOut класс не будет частью, того класса который используется для получение данных из сети и кэша. Как я его буду передавать дальше, если произошла ошибка?
Это кусок кода из gist
.onErrorResumeNext(throwable -> {
   return Observable.concat(Observable.just(fromCache), Observable.error(throwable));
})
Получается место Observable.error, я буду передавать NetworkExceptionTimeOut или его нужно будет как-то отдельно запрашивать?
источник

VI

Vitali Ill in Android Architecture
Всем привет, подскажите каким образом я могу производить инвалидацию кеша через room. Должно быть так:
При открытии моего списка, итемы должны подгружаться если есть из базы и одновременно запрос на загрузку уходил на сервер.
Результат: если есть обновления, то они появлялся незаметно для пользователя, если нет, то ничего не менялось
источник

Q

QMan in Android Architecture
SE
Получается даже то, что вы сказали создать NetworkExceptionTimeOut класс не будет частью, того класса который используется для получение данных из сети и кэша. Как я его буду передавать дальше, если произошла ошибка?
Это кусок кода из gist
.onErrorResumeNext(throwable -> {
   return Observable.concat(Observable.just(fromCache), Observable.error(throwable));
})
Получается место Observable.error, я буду передавать NetworkExceptionTimeOut или его нужно будет как-то отдельно запрашивать?
Зачем его передавать куда-то ? Этот класс будет заниматься одним единственным: фиксировать ошибку сервера, его время и проверять, не прошел ли временной промежуток после последней ошибки
источник

Q

QMan in Android Architecture
Всё это в репозитории
источник

Q

QMan in Android Architecture
И название я дал приблизительное, назовите так, как считаете нужным
источник

S

SE in Android Architecture
QMan
И название я дал приблизительное, назовите так, как считаете нужным
@qmanqman спасибо!
источник

IS

Ivan Sablin in Android Architecture
Ребят, вопрос по BindingAdapters. В общем есть модуль, в нем есть binding adapters. Если я их использую, то не могут сгенериться конкретные имплементации, где используются эти адаптеры. Отчаившись я тупо перенес их в другой модуль и почему-то в этом случае они работают. Я создал другой модуль, в него перенес папку main и градл конфиг, так же не работает. Почему это может не работать. Сама ide ничего ни на что не ругается и все видит, но при сборке сгенириться не может
источник
2020 June 28

NR

Nikolay Reznik in Android Architecture
Ребят, подскажите пожалуйста по архитектуре ORM Room и Recyclerview (в список надо вывести кол-во расхода и name статьи). Есть две сущности, например article, expenses. Одна живет в другой, связь one to many.
Есть ExpensesAdapter, который держит в себе данные и связь с вьюшками. Мне категорически не нравится то, что приходится доп. инфу тянуть из repository. Как тут быть?
п.с. в основном бэком занимаюсь, попутно залез в андройд, и наткнулся на проблему.
Выход я думаю ещё один есть, это делать общую сущность, которую заранее заполнять из dao, но думаю спросить.
источник