@android_ru

Страница 681 из 3205
Глеб
16.12.2016
09:54:24
Привет! Кто хорошо разбирается в Gson, подскажите, пожалуйста, как распарсить вот такую структуру, когда в массиве данные разных типов: { "data":[ { "type":"type1", "data":[1,2,3] }, { "type":"type2", "data":"hello" } ] }

Google
Quarx2k ?
16.12.2016
09:55:10
я просто могу его кидать в конструкторы и в методы как параметр
Не всегда удобно и красиво и возможно. А статик контекст App разререшно делать и он не вредит в отличии от статик контекста активити

Alexander
16.12.2016
09:55:12
Прервать рабочие асинктаски, начать новые после поворота. Твои варианты?
тот же вопрос - а если в асинктаске операция, которую нельзя повторить не зная результата предыдущей попытки? Варианты - сервисы, потоки, mvp и т.д. - всё что не зависит от жизненого цикла активити

Глеб
16.12.2016
09:55:36
Object не?
Это как?

Evgenii
16.12.2016
09:55:55
object не прокатит

Alexey
16.12.2016
09:55:57
Прервать рабочие асинктаски, начать новые после поворота. Твои варианты?
за асинк таски для работы с сетью надо по рукам бить

Evgenii
16.12.2016
09:56:07
нужно свой адаптер в гсон пихать

Andre
16.12.2016
09:56:10
кстати статик там возможно для поворота ))
интересно, но тут один режим, без поворотов

Владислав
16.12.2016
09:56:32
да я напоролся на такое гавно
другое дело когда на нулевой позиции null а на последующих фрагменты, при повороте экрана этот список перестраивается таким образом чтобы на нулевой позиции был фрагмент, который до поворота экрана был на последней. это вызывает неправильное отображение нескольких фрагментов в одном контейнере а провоцируется такое поведение неправильным управлением бэкстеком. вот так вот.

Alexander
16.12.2016
09:56:59
Привет! Кто хорошо разбирается в Gson, подскажите, пожалуйста, как распарсить вот такую структуру, когда в массиве данные разных типов: { "data":[ { "type":"type1", "data":[1,2,3] }, { "type":"type2", "data":"hello" } ] }
чтото на подобие этого protected static boolean isContainsPrimitive(JsonObject object, String key) { return object.get(key) != null && object.get(key).isJsonPrimitive(); } protected static boolean isContainsObject(JsonObject object, String key) { return object.get(key) != null && object.get(key).isJsonObject(); } protected static boolean isContainsArray(JsonObject object, String key) { return object.get(key) != null && object.get(key).isJsonArray();

Evgenii
16.12.2016
09:57:06
> @Andre1024 интересно, но тут один режим, без поворотов на будущее ))

Google
Andre
16.12.2016
09:57:18
ок)

Глеб
16.12.2016
09:57:45
Понял, спасибо большое всем!

Alexander
16.12.2016
09:57:49
contains*
точно)

Ilya
16.12.2016
09:58:12
Привет! Кто хорошо разбирается в Gson, подскажите, пожалуйста, как распарсить вот такую структуру, когда в массиве данные разных типов: { "data":[ { "type":"type1", "data":[1,2,3] }, { "type":"type2", "data":"hello" } ] }
Думаю что в полноцннные POJO такое ты распарсить не сможешь, но, ЕМНИП, по-умолчанию, GSON создает древовидную структуру из List-ов, и Map-ок, так что, если уверен в данных, то кастуешь и получаешь значение по индексу/имени.

...хотя API-шка возвращающая /такое/ неок по-определению, имхо.

Владислав
16.12.2016
10:00:02
да знаю, возможно так сделано чтобы не перевыделять память под новые элементы ArrayList, а просто в убранные нулл вставляется. Это внутренняя реализация и поэжтому лучше не лезть туда. А зачем тебе понадобился getFragments() ?
не понадобился. просто есть у меня контейнер, в нем два фрагмента. один выше другого добавлен через fragmentManager.add(...) после поворота экрана они меняются местами(тот который был над первым выше оказывался под первым) то, какой фрагмент выводить в контейнер первым, определяется положением в списке getFragments()

а при повороте, как я говорил, менеджер просто перестраивает этот список таким образом чтобы заполнить нулевые позиции в начале списка элементами из конца списка

ну и фрагменты начинают рисоваться неправильно

Alexander
16.12.2016
10:03:53
Загружать картинки / записи из БД через сервис? Использовать сырые потоки — не надо так.
а если ты, например, не достаёшь, а сохраняешь в БД изменения или добавляешь с не уникальным ключом?

Владислав
16.12.2016
10:04:01
плохой вариант сразу 2 фрагмента в 1 контейнер мне кажется
согласен но тут от заказчика было требование сделать одну активность на всё приложение

Alexey
16.12.2016
10:04:23
который должен поверх - тот ниже

Владислав
16.12.2016
10:04:40
их на самом деле уже четыре штуки)

Alexey
16.12.2016
10:04:53
их на самом деле уже четыре штуки)
заказчик диктует как делать?

Владислав
16.12.2016
10:06:24
в разных местах, правда вобщем, это усложнило бы реализацию контроллера фрагментов здоровски, потому что в одном контейнере, по правде говоря(на одном месте экрана), может открываться 5+ фрагментов

не диктует прям как сделать, но диктует как должно выглядеть и кроме как одной активностью это не сделать

Google
Владислав
16.12.2016
10:08:48
есть вариант динамически инфлейтить фрейм для каждого фрагмента, но при поворотах нужно восстанавливать айдишники, инфлейтить их заново до того как фрагмент менеджер решит восстановить все фрагменты и все такое вобщем геморно но и сейчас гемора отхватил знатно

заказчика смущает то что стрелочка в тулбаре при смене активностей не крутится

анимация "бургер-стрелочка" я имею ввиду

Alexey
16.12.2016
10:10:20
заказчика смущает то что стрелочка в тулбаре при смене активностей не крутится
впринципе реализуемо чтобы крутилось. заоверайдить анимацию появление активности

сделать чтобы стрелка крутилась, а у активити не было такой дефолтной анимации будто она откуда-то вылезла

balolam
16.12.2016
10:11:47
анимация "бургер-стрелочка" я имею ввиду
В смысле их должно быть 5+, почему не replace?

Владислав
16.12.2016
10:12:07
ага, вариант но там еще другие требования были сейчас не вспомню, но в итоге кроме как оставить одну активность нам не оставили выбора

Quantum Harmonizer
16.12.2016
10:12:12
а если ты, например, не достаёшь, а сохраняешь в БД изменения или добавляешь с не уникальным ключом?
Выбирать данные и сохранять их — задача для презентера или контроллера (сервиса). Если данные соответствуют представлению и не требуют большой и сложной или длительной обработки или отправки на бэк, то можно это сделать в презентере. По длительности и размеру кода такая задача занимает промежуточное положение между "безболезненно дёрнуть что-нибудь в UI-потоке" и "долго думать в сервисе". Как мне кажется, такой задаче самое место в AsyncTask: она имеет смысл в контексте одной активити (после пересоздания результат можно проигнорировать) и длится не долго (не вызовет утечку старой активити). Поэтому я не вижу табу на выборку данных в AsyncTask. Над сохранением нужно думать внимательнее, потому что после пересоздания активити может понадобится уведомить активити об обновлении (если ORM этого не делает сама, как это делает Realm), придётся делать развязку (Local Broadcast), как с сервисом.

balolam
16.12.2016
10:12:49
Звучит так, как буд-то ты их накладываешь один поверх другого

Почему add?

balolam
16.12.2016
10:13:24
Почему не replace?

Alexander
16.12.2016
10:17:24
Выбирать данные и сохранять их — задача для презентера или контроллера (сервиса). Если данные соответствуют представлению и не требуют большой и сложной или длительной обработки или отправки на бэк, то можно это сделать в презентере. По длительности и размеру кода такая задача занимает промежуточное положение между "безболезненно дёрнуть что-нибудь в UI-потоке" и "долго думать в сервисе". Как мне кажется, такой задаче самое место в AsyncTask: она имеет смысл в контексте одной активити (после пересоздания результат можно проигнорировать) и длится не долго (не вызовет утечку старой активити). Поэтому я не вижу табу на выборку данных в AsyncTask. Над сохранением нужно думать внимательнее, потому что после пересоздания активити может понадобится уведомить активити об обновлении (если ORM этого не делает сама, как это делает Realm), придётся делать развязку (Local Broadcast), как с сервисом.
в целом то всё правильно, но если я один фиг делаю презентор для 100% надёжной работы с данными, использующий потоки/интеракторы/сервисы/чтомнепридётвголову/... , зачем мне ещё асинктаск, больтающийся во "вью", который надо отдельно синхронизировать с этим презентором?

Alexander
16.12.2016
10:18:23
Владислав
16.12.2016
10:18:40
Почему не replace?
когда делаешь реплейс, вьюха дестроится у фрагмента нижнего сложный лэйаут, да к тому же виджеты строятся в рантайме(они приходят с сервака), ну и собственно чтоб ускорить рендеринг используется add

Quantum Harmonizer
16.12.2016
10:18:45
в интеракторе
Что за паттерн, где почитать?

Владислав
16.12.2016
10:18:59
Alexey
16.12.2016
10:19:04
Google
Alexey
16.12.2016
10:19:48
вот, чуваки, скажите мне, нафига вы используете async task ?

дайте мне хоть 1 достойный аргумент

Quantum Harmonizer
16.12.2016
10:20:07
Выбирать данные и сохранять их — задача для презентера или контроллера (сервиса). Если данные соответствуют представлению и не требуют большой и сложной или длительной обработки или отправки на бэк, то можно это сделать в презентере. По длительности и размеру кода такая задача занимает промежуточное положение между "безболезненно дёрнуть что-нибудь в UI-потоке" и "долго думать в сервисе". Как мне кажется, такой задаче самое место в AsyncTask: она имеет смысл в контексте одной активити (после пересоздания результат можно проигнорировать) и длится не долго (не вызовет утечку старой активити). Поэтому я не вижу табу на выборку данных в AsyncTask. Над сохранением нужно думать внимательнее, потому что после пересоздания активити может понадобится уведомить активити об обновлении (если ORM этого не делает сама, как это делает Realm), придётся делать развязку (Local Broadcast), как с сервисом.

Владислав
16.12.2016
10:20:09
давно не слышал что бы кто-то это использовал

Quantum Harmonizer
16.12.2016
10:20:17
Igor
16.12.2016
10:20:37
для таких штук достаточно в тред завернуть

Quantum Harmonizer
16.12.2016
10:21:06
для таких штук достаточно в тред завернуть
а ещё приоритет понизить и позвать runOnUiThread. Можно даже свой AsyncTask запилить.

Владислав
16.12.2016
10:21:17
для таких штук достаточно в тред завернуть
а потом из треда создавать хендлер и передвать туда лупер чтобы оповестить вьюху?

Quantum Harmonizer
16.12.2016
10:21:25
VIPER в гугле поищи)
Спасибо. Почему-то думал, что актуально только в iOS.

Владислав
16.12.2016
10:21:27
правда я не в теме о штуках

Admin
ERROR: S client not available

Alexander
16.12.2016
10:21:28
Что за паттерн, где почитать?
да собсно любой, расширающий чистый mvp добавляет логику работы с данными между презентором и моделью - в общем это обзывают интерактором.

Alexey
16.12.2016
10:21:47
Выбирать данные и сохранять их — задача для презентера или контроллера (сервиса). Если данные соответствуют представлению и не требуют большой и сложной или длительной обработки или отправки на бэк, то можно это сделать в презентере. По длительности и размеру кода такая задача занимает промежуточное положение между "безболезненно дёрнуть что-нибудь в UI-потоке" и "долго думать в сервисе". Как мне кажется, такой задаче самое место в AsyncTask: она имеет смысл в контексте одной активити (после пересоздания результат можно проигнорировать) и длится не долго (не вызовет утечку старой активити). Поэтому я не вижу табу на выборку данных в AsyncTask. Над сохранением нужно думать внимательнее, потому что после пересоздания активити может понадобится уведомить активити об обновлении (если ORM этого не делает сама, как это делает Realm), придётся делать развязку (Local Broadcast), как с сервисом.
ретрофитом асинхронный запрос с колбэком, не ?

Владислав
16.12.2016
10:22:02
runOnUiThread
а зачем тогда вообще тред отдельный создавать?

Alexander
16.12.2016
10:22:38
VIPER в гугле поищи)
мне сама реализация для андроида не понравилась, делаь фрагмент для хранения данных

Quantum Harmonizer
16.12.2016
10:23:16
а зачем тогда вообще тред отдельный создавать?
Чтобы кадры не пропускать. Recycler с картинками, подгружаемыми в UI-потоке, выглядит убого и дёргано.

Alexey
16.12.2016
10:23:35
а зачем тогда вообще тред отдельный создавать?
в смысле? тред отработал, в конце вызвал runOnUiThread

Владислав
16.12.2016
10:23:54
в смысле? тред отработал, в конце вызвал runOnUiThread
тьфу подумлал, ты предлагаешь фоновые задачи запускать через runOnUiThread

Google
Владислав
16.12.2016
10:24:22
или что-нибудь похожее

Quantum Harmonizer
16.12.2016
10:24:45
VIPER в гугле поищи)
хех) https://play.google.com/store/apps/details?id=com.vipercn.viper4android_v2_fx

Igor
16.12.2016
10:25:02
забудьте про треды и асинктаски есть же куча адекватных реализаций

Alexey
16.12.2016
10:25:29
Quantum Harmonizer
16.12.2016
10:25:50
используй Picasso для подгрузки картинок
Разговор об инструментах системы для асинхронности, а не о загрузке картинок как таковой. Например, с помощью Picasso не загрузишь записи из БД.

Quantum Harmonizer
16.12.2016
10:27:08
забудьте про треды и асинктаски есть же куча адекватных реализаций
Я использовал AsyncTask для парсинга Markdown, например. Было бы глупо разобранное синтаксическое дерево прокидывать из сервиса.

Alexey
16.12.2016
10:28:31
или вообще на rx

если он в проекте есть

Quantum Harmonizer
16.12.2016
10:29:32
а парсил в адаптере?
Парсил в AsyncTask. В адаптере байндил готовое синтаксическое дерево.

Владислав
16.12.2016
10:29:59
Quantum Harmonizer
16.12.2016
10:30:19
Quantum Harmonizer
16.12.2016
10:30:49
Владислав
16.12.2016
10:31:29
в onCreateView фрагмента
это и правда стоило бы вынести в какой-то интерактор, как уже посоветовали

Alexey
16.12.2016
10:32:05
Недолюбливаю rx. :upside_down_face:
может ты просто не научился его правильно готовить??

balolam
16.12.2016
10:32:06
Хранить экраны и рисовать поверх - это очен плохо. Включи настройках отображение наложений лайаутов при прорисовке и посмотри что у тебя там будет. Вскоре все анимации будут лагать по дикому, да и время пересоздания активности будет долгим

Quantum Harmonizer
16.12.2016
10:32:06
неправильно ты делаешь, Кот Матроскин! Можно хотя бы лоадер заюзать
Как-то я не подружился с лоадерами. Почему — не помню. Пора пересматривать своё отношение к ним. И, если я правильно помню, лоадеры основаны на асинктасках.

это и правда стоило бы вынести в какой-то интерактор, как уже посоветовали
Весь фрагмент умещается в полторы страницы кода, не вижу смысла отделять тривиальное представление от тривиальной логики.

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