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

Alexey
16.12.2016
09:54:57

Andre
16.12.2016
09:55:01

Quantum Harmonizer
16.12.2016
09:55:04

Google

Quarx2k ?
16.12.2016
09:55:10

Alexander
16.12.2016
09:55:12

Andre
16.12.2016
09:55:28

Глеб
16.12.2016
09:55:36

Quantum Harmonizer
16.12.2016
09:55:39
Привет! Кто хорошо разбирается в Gson, подскажите, пожалуйста, как распарсить вот такую структуру, когда в массиве данные разных типов:
{
"data":[
{
"type":"type1",
"data":[1,2,3]
},
{
"type":"type2",
"data":"hello"
}
]
}
Зарегистрировать TypeAdapter, который парсит всё в обычные Map / List, а потом сам мутит полиморфизм.

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 а на последующих фрагменты, при повороте экрана этот список перестраивается таким образом чтобы на нулевой позиции был фрагмент, который до поворота экрана был на последней. это вызывает неправильное отображение нескольких фрагментов в одном контейнере
а провоцируется такое поведение неправильным управлением бэкстеком. вот так вот.

Quantum Harmonizer
16.12.2016
09:56:59


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
ок)

Quantum Harmonizer
16.12.2016
09:57:36

Alexey
16.12.2016
09:57:45

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

Alexander
16.12.2016
09:57:49

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
а при повороте, как я говорил, менеджер просто перестраивает этот список таким образом чтобы заполнить нулевые позиции в начале списка элементами из конца списка
ну и фрагменты начинают рисоваться неправильно

Alexey
16.12.2016
10:01:45
лучше 2 контейнера, тогда фрагмент менеджер не будет за тебя решать какой ниже, а какой выше расположить

Alexander
16.12.2016
10:03:53

Владислав
16.12.2016
10:04:01

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

Alexey
16.12.2016
10:08:35

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

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

balolam
16.12.2016
10:11:47

Владислав
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% надёжной работы с данными, использующий потоки/интеракторы/сервисы/чтомнепридётвголову/... , зачем мне ещё асинктаск, больтающийся во "вью", который надо отдельно синхронизировать с этим презентором?


Quantum Harmonizer
16.12.2016
10:18:04

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

Владислав
16.12.2016
10:21:17

Quantum Harmonizer
16.12.2016
10:21:25

Владислав
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:38

Alexey
16.12.2016
10:21:47

Владислав
16.12.2016
10:22:02

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

Quantum Harmonizer
16.12.2016
10:23:16

Alexey
16.12.2016
10:23:35

Владислав
16.12.2016
10:23:54

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

Владислав
16.12.2016
10:26:16

Alexey
16.12.2016
10:26:23

Quantum Harmonizer
16.12.2016
10:27:08

Владислав
16.12.2016
10:28:01

Igor
16.12.2016
10:28:21

Alexey
16.12.2016
10:28:31
или вообще на rx
если он в проекте есть

Quantum Harmonizer
16.12.2016
10:29:32

Владислав
16.12.2016
10:29:59

Quantum Harmonizer
16.12.2016
10:30:19

balolam
16.12.2016
10:30:38

Quantum Harmonizer
16.12.2016
10:30:49

Владислав
16.12.2016
10:31:29

Alexey
16.12.2016
10:32:05

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

Quantum Harmonizer
16.12.2016
10:32:06