
Vitaliy
08.01.2017
15:50:58
Есть вопрос к вам.
Задача: работа с ВК апи.

Vadim
08.01.2017
15:51:22
private static Retrofit.Builder sBuilder = new Retrofit.Builder()
.baseUrl(AppConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create());

Vitaliy
08.01.2017
15:51:23
Особенное условие: апи может возвращать ошибки, из-за которых надо паузить все реквесты.

Google

Vitaliy
08.01.2017
15:51:29
Например, каптча.

Vadim
08.01.2017
15:51:32
Ты про фактори,

Vitaliy
08.01.2017
15:51:32
Или валидация.

Сергей
08.01.2017
15:51:33

Vitaliy
08.01.2017
15:51:36
Или вылет авторизации.
Вопрос: стандартными средствами ретрофита, без костылей, это получится сделать?

Сергей
08.01.2017
15:52:06
https://vk.com/dev/Java_SDK

Vitaliy
08.01.2017
15:52:15

Сергей
08.01.2017
15:52:30
круто :)

Vitaliy
08.01.2017
15:52:41
Вопрос о теоретических возможностях ретрофита

Ilnar
08.01.2017
15:52:42

Vitaliy
08.01.2017
15:52:47
А не о решении конкретных задач

Google

Vitaliy
08.01.2017
15:53:08
Посылать вопрос заново, как только юзер каптчу введет

Igor
08.01.2017
15:53:31

Vitaliy
08.01.2017
15:53:37
Модифицируя параметры

Vadim
08.01.2017
15:54:34
Ок

Иван
08.01.2017
15:54:41
Есть идеи как юзать Realm во фрагменте?

Vitaliy
08.01.2017
15:54:55

Vadim
08.01.2017
15:54:56

Vitaliy
08.01.2017
15:55:01
Какой ещё реалм во фрагменте, вы чо

Vadim
08.01.2017
15:55:04

Vitaliy
08.01.2017
15:55:07
Выносите подальше это от ЮИ

Ilnar
08.01.2017
15:55:15

Vitaliy
08.01.2017
15:55:24
Я знаю про это
Но паузинг запросов это уже задача посерьезнее

Иван
08.01.2017
15:55:42
А как тогда его вынести?

Vitaliy
08.01.2017
15:55:45
Как и показ окошка с каптчей из интерсептора

Иван
08.01.2017
15:55:50
Сервис?

Vitaliy
08.01.2017
15:55:51
Сервис нужен только и только в том случае, если твое приложение выполняет долгую задачу. Если ты делаешь её в синглтоне или в любом месте кода, система может грохнуть приложение при нехватке
При сервисе оно просто грохнет все активити

Google

Vitaliy
08.01.2017
15:57:15
Хочешь — выноси, хочешь — нет

Михаил
08.01.2017
15:57:15
такой вопрос по реалму кстати. как там можно реализовать работу с реалм лисенерами не в ui треде?

Vitaliy
08.01.2017
15:57:23
Если ты это потом в ЮИ показываешь, смысла нет
А вот если ты музыку играешь — то да
Или торренты раздаешь
Или большой файл аплоадишь

Иван
08.01.2017
15:57:53
так как лучше вынести, лучше с примером, а то я не совсем понимаю

Vitaliy
08.01.2017
15:58:21
interface Repolsitory {
List<ISong> getSongs();
}
getApplication().getSongsRepository().getSongs()
А внутри уже делай запросы к реалму
Но абстрагируйся на что-то конкретное, чтобы ты в случае чего легко мог поменять реализацию на SQLite или что-то другое

Ilnar
08.01.2017
16:00:14

Иван
08.01.2017
16:00:17
о таких вещах поздно думать когда в проекте 40к строк кода

Vitaliy
08.01.2017
16:00:34
Пока не введешь каптчу, все остальные запросы делать нет смысла
Я не считаю это правильным решением, но это задача, из условий которой необходимо исходить

Иван
08.01.2017
16:01:42

Vitaliy
08.01.2017
16:02:06
copyToRealm() — это метод реализации
Ты о нем ничего внутри фрагмента знать не должен
Напиши реализацию этого интерфейса, которая будет юзать реалм

Google

Vitaliy
08.01.2017
16:02:41
И проинициализируй её в Application

Иван
08.01.2017
16:03:01
это понятно, мне нужно выкачивать данные кварями, но если я отдам то что отдал квари после закрытия реалма будет неюзабельным.
Суть я понял

Vitaliy
08.01.2017
16:03:11
Repository songs = new RealmSongRepository();
А дальше дергай методы интерфейса
Передумаешь — просто поменяешь инициализацию
Тем более что он позволяет сразу модельки получать

Иван
08.01.2017
16:04:41
а каким образом там лучше получать чистые модели?

Gleb
08.01.2017
16:05:01
Это не проблема архитектуры, это особенность апи
Если я правильно понимаю - ретрофит сидит на окштпп - а он может cancel-ить запросы - пауза - такого банально нет нет в апи okhttp - соответственно - когда запрос начался - ты его "заморозить" ну никак не сможешь. А до и после - видать самому как то стейт глобальный иметь - типа "запросы залочены" - может даже по такой ошибке пере-schedul-ивать их на попозже

Vitaliy
08.01.2017
16:05:21

Admin
ERROR: S client not available

Vitaliy
08.01.2017
16:05:26
Совсем недавно щупал реалм
Но это костыль
А сетевой слой там вроде бы меняется
Мне интересно узнать, есть ли там нормальная система работы с этим, дабы гибко управлять всеми запросами

Gleb
08.01.2017
16:06:29

Vitaliy
08.01.2017
16:06:43
Да, смысла отправлять запросы все равно нет
Ошибку получишь, трафф зря потратишь
Или ошибка истечения токена — надо редиректнуть на авторизацию

Google

Gleb
08.01.2017
16:08:15

Vitaliy
08.01.2017
16:08:23
Да.
Ты их все равно бы перезапустил, если бы не паузил
Результат-то показать надо
Но никто про 100К не говорит, там по факту штук 5 максимум
Обычно 1-2

Gleb
08.01.2017
16:09:46
Да.
Не....сори.. я тебя понял...тут я не силён....
я похожее для отмены делал (типа по закрытию фрагмента/активити/сервиса - отменять всё)

Vitaliy
08.01.2017
16:10:55
Поэтому мне и не нравится ретрофит :(
Это хорошая библиотека, я не ненавижу его, как Rx или Dagger
Но просто он не всегда достаточно гибкий :(

Dmitrii
08.01.2017
16:11:39
Виталий, я в итоге складываю все реквесты в Map в Interceptor классе

Gerc
08.01.2017
16:11:49
Отослал запрос на проверку токена, если не проходит то показываешь капчу и после ее заполнения выполняешь свои запросы, если не нужно показывать капчу, то просто выполняешь свои запросы

Vitaliy
08.01.2017
16:11:58

Dmitrii
08.01.2017
16:11:58
У меня кес — остановить все запросы пока обновляется токен

Vitaliy
08.01.2017
16:12:08
Ага, именно это я и имел в виду

Gleb
08.01.2017
16:12:21

Dmitrii
08.01.2017
16:12:34
Уж капча или обновление токена ИМХО нет разницы

Vitaliy
08.01.2017
16:12:35
Чтобы током било тех, кто их расхваливает
В зависимости от степени хвальбы

Gleb
08.01.2017
16:13:27
?

Vitaliy
08.01.2017
16:13:36
А создателей сразу 10К вольт