@android_ru

Страница 773 из 3205
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
заюзать библиотечку вк?
Я один из её авторов, можете мне про нее не говорить :)

https://vk.com/dev/Java_SDK
И этой тоже помогал

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

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

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

Google
Vitaliy
08.01.2017
15:53:08
Интерцепторы?)
Допустим. Ими можно паузить запросы? Без wait..notify()

Посылать вопрос заново, как только юзер каптчу введет

Igor
08.01.2017
15:53:31
private static Retrofit.Builder sBuilder = new Retrofit.Builder() .baseUrl(AppConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create());
Вот, там же жсон конвертер. Если хочешь чистый стринг, убери его

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
Vitaliy
08.01.2017
15:55:01
Какой ещё реалм во фрагменте, вы чо

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

Ilnar
08.01.2017
15:55:15
Допустим. Ими можно паузить запросы? Без wait..notify()
Можно, можно их кастомизировать как тебе удобно Самое банальное использование интеосепторов - рефреш токена, менять хедеры и тд

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
getApplication().getSongsRepository().getSongs()
я парвильно понимю что в таком случае лучше использовать copyFromRealm чтобы абстрагироватся от инстанса

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
Ты можешь делать wait() в интерсепторе
ну да.... более того... а если чувак так и не ввел капчу - эт они бесконечно скапливаться "на ожидании" будут?

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
Отослал запрос на проверку токена, если не проходит то показываешь капчу и после ее заполнения выполняешь свои запросы, если не нужно показывать капчу, то просто выполняешь свои запросы

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

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

Gleb
08.01.2017
16:12:21
Это хорошая библиотека, я не ненавижу его, как Rx или Dagger
добавь сюда ещё котлин ... и жди... они уже идут??

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К вольт

Страница 773 из 3205