Size: a a a

Kotlin Community

2019 October 30

AN

Alexander Nozik in Kotlin Community
Если нужен Стейт в экстеншены, можно делать стейтфул контекст
источник
2019 October 31

B

Beholder in Kotlin Community
Адище...
factory.createVmsMessagePictogramDisplayAreaIndexVmsPictogramDisplayArea()
Это JAXB'ом нагенерилось...
источник

B

Beholder in Kotlin Community
Из той же песни
createVmsPictogramDisplayAreaPictogramSequencingIndexVmsPictogram()
источник

B

Beholder in Kotlin Community
И ничего с этим поделать-то нельзя - плакали, кололись, но создавали
источник

B

Beholder in Kotlin Community
Вылетаем за 120 колонок лехко... Хотя есть же вроде JAXB custom bindings, но я пока не настолько эксперт.
источник

VB

Viacheslav Blinov in Kotlin Community
Alexander Nozik
Чем не годятся обычные экстеншены?
Тем что нужно получать коллбек который добавляется только путем переопределения метода Activity, чего из экстеншн-метода явно не сделать
источник

VB

Viacheslav Blinov in Kotlin Community
Alexander Nozik
Если нужен Стейт в экстеншены, можно делать стейтфул контекст
Да, но тут одно это не поможет.
источник

I

Igor in Kotlin Community
Ребят почему в такой ситуации  flowOn не работает: viewModelScope.launch {
           channelOne.asFlow()
               .combine(channelTwo.asFlow()) { i, j ->
                   i
               }.flowOn(Dispatchers.IO)
               .combine(channelThree.asFlow()) { i, k ->
                   i
               }
               .collect {
               }
       }
 для каналов я делаю                                                 viewModelScope.launch {
           runChannelOne()
       }
                                                                                                                                            в методе runChannelOne происходит send и ничего более, сам viewModelScope.launch запускается в UI потоке, каналы у меня BroadcastChannel
источник

AO

Alexey Otts in Kotlin Community
Igor
Ребят почему в такой ситуации  flowOn не работает: viewModelScope.launch {
           channelOne.asFlow()
               .combine(channelTwo.asFlow()) { i, j ->
                   i
               }.flowOn(Dispatchers.IO)
               .combine(channelThree.asFlow()) { i, k ->
                   i
               }
               .collect {
               }
       }
 для каналов я делаю                                                 viewModelScope.launch {
           runChannelOne()
       }
                                                                                                                                            в методе runChannelOne происходит send и ничего более, сам viewModelScope.launch запускается в UI потоке, каналы у меня BroadcastChannel
И опять же, если хочешь, чтобы тебе помогли напиши минимально воспроизводимый пример
источник

I

Igor in Kotlin Community
Alexey Otts
И опять же, если хочешь, чтобы тебе помогли напиши минимально воспроизводимый пример
Да по сути там больше ничего нет, если только сам метод                               private suspend fun runChannelOne() {
       for (i in 1..10) {
           delay(100)
           channelOne.send(i)
       }
   }
              он анлогичен для все каналов, создание канала такое                       val channelOne = BroadcastChannel<Int>(10)
источник

AO

Alexey Otts in Kotlin Community
Igor
Да по сути там больше ничего нет, если только сам метод                               private suspend fun runChannelOne() {
       for (i in 1..10) {
           delay(100)
           channelOne.send(i)
       }
   }
              он анлогичен для все каналов, создание канала такое                       val channelOne = BroadcastChannel<Int>(10)
А во второй и третий канал точно что то приходит?
источник

I

Igor in Kotlin Community
Alexey Otts
А во второй и третий канал точно что то приходит?
да точно                                                                                                                                     private suspend fun runChannelTwo() {
       for (i in 11..20) {
           delay(100)
           channelTwo.send(i)
       }
   }

   private suspend fun runChannelThree() {
       for (i in 21..30) {
           delay(100)
           channelThree.send(i)
       }
   }
все данные приходят, только контекст не переключается
источник

OY

Oleg Yukhnevich in Kotlin Community
Igor
Ребят почему в такой ситуации  flowOn не работает: viewModelScope.launch {
           channelOne.asFlow()
               .combine(channelTwo.asFlow()) { i, j ->
                   i
               }.flowOn(Dispatchers.IO)
               .combine(channelThree.asFlow()) { i, k ->
                   i
               }
               .collect {
               }
       }
 для каналов я делаю                                                 viewModelScope.launch {
           runChannelOne()
       }
                                                                                                                                            в методе runChannelOne происходит send и ничего более, сам viewModelScope.launch запускается в UI потоке, каналы у меня BroadcastChannel
а почему ты решил, что flowOn не работает?
источник

I

Igor in Kotlin Community
Alexey Otts
А во второй и третий канал точно что то приходит?
по факту получается, что контекст зависит только от launch в котором находится flow.collect, на остальные контексты он не реагирует
источник

I

Igor in Kotlin Community
Oleg Yukhnevich
а почему ты решил, что flowOn не работает?
я смотрю по потоку какой контекст и вижу что контекст не меняется
источник

I

Igor in Kotlin Community
Oleg Yukhnevich
а почему ты решил, что flowOn не работает?
вообще сейчас проверил Thread.currentThread().name поток меняется, видимо сам coroutineContext остается неизменным, этот вопрос в таком кейсе как-то не совсем очевиден
источник

OY

Oleg Yukhnevich in Kotlin Community
Igor
вообще сейчас проверил Thread.currentThread().name поток меняется, видимо сам coroutineContext остается неизменным, этот вопрос в таком кейсе как-то не совсем очевиден
https://pl.kotl.in/bV-MgyW2B
вроде всё меняется и ведёт себя как надо
источник

QH

Quantum Harmonizer in Kotlin Community
Viacheslav Blinov
во времена scala on android мы так расширяли апи Activity например, переопределяя в trait-ах методы активити.

Буквально вчера делал подобное расширение  на котлине (навигация с возвратом результата от активити через саспенд-функцию), и столкнулся с тем, что приходится делать интерфейс, и подкладывать "Helper" чтобы пользователь библиотеки мог добавить себе функциональность в свой любимый сабкласс активити. В scala юзер библиотеки просто писал бы MyActivity extends AppCompatActivity with SuspendNavigation. В котлине ему прийдется либо расширять класс предоставленный либой (и он лишится выбора AppCompatActivity vs LeanbackActivity for instance) либо каждый раз использовать некий Helper и грамотно перегружать нужные методы Activity.

Как вариант, вместо миксинов это могли бы быть какие-нибудь хитрые делегаты.
Во-первых, с андроидом всё понятно и очень печально. Попытка как-то это исправить — CompositeAndroid.
Во-вторых, пока Continuation не сериализуемы, startActivityForResult нельзя дожидаться в корутине, потому что процесс может быть пересоздан.
источник

I

Igor in Kotlin Community
Oleg Yukhnevich
https://pl.kotl.in/bV-MgyW2B
вроде всё меняется и ведёт себя как надо
спасибо, сейчас потестирую на вашем примере
источник

AL

Anton Lakotka in Kotlin Community
Немного нубовый вопрос. но можете посоветовать удобные валидаторы для DTOшек.
Желательно чтобы можно было валидировать не только простые вещи вида isNotEmpty или mustBePositive.

а еще и возможность проверять уникальность и прочее, т.е. иметь внешние зависимости у валидатора.
источник