@kotlin_lang

Страница 863 из 982
Alexandr
13.09.2018
05:49:14
ты делаешь что то не так

Di7aK
13.09.2018
05:49:33
а как надо

Alexandr
13.09.2018
05:50:00
задачу опиши что ты делаешь для начала

Di7aK
13.09.2018
05:50:12
кароч

Google
Di7aK
13.09.2018
05:50:41
нужен манагер загрузок с абортами

Alexandr
13.09.2018
05:54:44
андройд?

Di7aK
13.09.2018
05:57:58
само собой

юзаю ретрофит для аплоада и fuel для загрузки

это вообще нормально?

Alexandr
13.09.2018
06:00:21
чем стандартный манагер андройда не подходит?

Di7aK
13.09.2018
06:00:43
только для просмотра

пошло все в жепу буду говнокодить

Konstantin
13.09.2018
06:34:39
пошло все в жепу буду говнокодить
Это точно должно быть в kotlin community?

Di7aK
13.09.2018
06:39:09
Это точно должно быть в kotlin community?
ровно настолько насколько и твоя претензия, если такой не оффтоповский то зачем оффтопишь

Konstantin
13.09.2018
06:45:37
ровно настолько насколько и твоя претензия, если такой не оффтоповский то зачем оффтопишь
Во-первых, для офтопа есть специальный чатик (например @pofftop), во-вторых, нет необходимости так реагировать на замечания по делу.

Руслан
13.09.2018
07:18:18
тут два вопроса про то как использовать okhttp с корутинами были, покажу как я использовал (cc @InsanusMokrassar @Vorkytaka) Для начала нам нужен адаптер для функции enqueue, который использует callback чтобы сделать suspend функцию: class OkHttpException( val request: Request, val exception: Exception ) : RuntimeException(exception) suspend fun Call.await(): Response = suspendCoroutine { cont: Continuation<Response> -> this.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { cont.resume(response) } override fun onFailure(call: Call, exception: IOException) { cont.resumeWithException(OkHttpException(call.request(), exception)) } }) } Далее нам нужно... Да в общем-то и все, теперь можно брать и использовать: val response = okHttpClient.newCall(request).await() И вот например задача Алексея: fun muchFun(request: Request): Response = runBlocking { okHttpClient.newCall(request).await() }

Google
Denis
13.09.2018
07:19:16
Добрый день. Можно ли каким-то образом при map'е коллекции ставить условие с различными ихсодами? Т.е. что-то вроде этого list.map{ item -> if (item.property == smth) then item.anotherProperty = 10 else item.anotherProperty = 20} Стандартным способом не поулчается, но может есть какое-то хитрое решение? Есть вариант сделать 2 коллекции из 1 и для каждой свой фильтр под необходимое услвоие, но если будет больше чем 2 условия, то под каждое нужно будет новую операцию с коллекцией писать. Может есть какое-то способо получше?

Denis
13.09.2018
07:22:00
Ну если на выходе один и тот же тип - то вполне нормально запихнуть это в map с if-ом
один тип, только меняется значение свойста этого типа в зависимости от условия.

Руслан
13.09.2018
07:22:52
Ну все, должно работать. Проблема в твоем коде что ты возвращаещь Unit из map, и мутируешь item в мап

Denis
13.09.2018
07:27:08
Ну все, должно работать. Проблема в твоем коде что ты возвращаещь Unit из map, и мутируешь item в мап
да, работает. Но выглядит как-то некрасиво, может есть какой-то более лаконичный синтаксис, чтобы не было if/else?

Алексей
13.09.2018
07:30:59
То есть есть класс, в котором происходит работа с OkHttp, там и происходит вызов send, блокирующий всё на свете, включая поток отправки/получения данных

А есть там же метод, работающий с enqueue

Руслан
13.09.2018
07:33:46
Т.е. у е тебя есть выбор какой метод в либе использовать? Либа предоставляет асинхронный API получается? Или в либе есть условно плохой код, и при этом ты не автор либы?

Алексей
13.09.2018
07:34:43




Сверху шляпа, которую могу вызывать я, снизу - то, что происходит в итоге

то есть я могу передать коллбэки или заблокировать всё на свете

Я хотел написать что-то, что дёргало бы асинхронный метод, возвращало бы Deferred/лочило текущий поток/корутину и возвращало результат по await или просто как обычная функция

Руслан
13.09.2018
07:39:16
А, ну так все круто. У тебя есть асинхронный api, напиши функцию потипу той что я показал, она обернет send(req, call) и у тебя будет функция suspend send(req)

Алексей
13.09.2018
07:40:00
а можно конкретней?

https://github.com/InsanusMokrassar/AutoPostTelegramBot/blob/0.4.1/src/main/kotlin/com/github/insanusmokrassar/AutoPostTelegramBot/utils/extensions/TelegramBot.kt#L81

я пытался сделать так

но что-то вечно шло не так и отловить что именно у меня не получилось, но это не важно. Факт в том, что это не работает

Google
Руслан
13.09.2018
07:41:44
я пытался сделать так
Тебя не настраживает сам факт что у тебя функция даже не suspend?

Алексей
13.09.2018
07:42:09
я внутри оборачиваю всё в runBlocking

я помню, что runBlocking может сменить поток, если его уснуть

Руслан
13.09.2018
07:43:27
ой, нет. на многих уровнях не верно

Алексей
13.09.2018
07:43:47
Руслан
13.09.2018
07:44:00
зачем вообще делать runBlocking, если у тебя executeAsync не suspend.

Алексей
13.09.2018
07:44:18
там внизу join

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

Руслан
13.09.2018
07:44:59
потом вот такая цепочка колбеков https://github.com/InsanusMokrassar/AutoPostTelegramBot/blob/23866b3a3828aa1c843033477c26b514ac364607/src/main/kotlin/com/github/insanusmokrassar/AutoPostTelegramBot/plugins/base/commands/DeletePost.kt#L29

корутины как раз нужны чтобы от этого избавиться

Алексей
13.09.2018
07:45:29
Pavlo
13.09.2018
07:45:31
да, работает. Но выглядит как-то некрасиво, может есть какой-то более лаконичный синтаксис, чтобы не было if/else?
кстати, если ты меняешь только пропертю, но не сам обьект, не лучше ли foreach использовать?

Алексей
13.09.2018
07:45:39
но что мне делать вот с этим?:)

Руслан
13.09.2018
07:46:50
но что мне делать вот с этим?:)
join-ом ты пытаешься я так понимаю timeout реализовать?

вообще вот эта конструкция с launch

Алексей
13.09.2018
07:48:37
join-ом ты пытаешься я так понимаю timeout реализовать?
Ну в классической Java это делается через wait и notify объекта, тут так делать нельзя, поэтому я создаю вечную корутину, которую отменяю и ловлю отмену в runBlocking

Siyr
13.09.2018
07:48:50
5 лет кодил на яве называется и ничего не знаю
Поэтому ключи immutable должны бытт

Google
Алексей
13.09.2018
07:49:52
так зачем этот launch? что он должен сделать
Уведомление о том, что результат готов

Di7aK
13.09.2018
07:50:02
с fuel никто не работал? у меня при вызове cancel() на загрузке файла ничего не происходит, дальше грузит

Руслан
13.09.2018
07:50:11
Уведомление о том, что результат готов
нет, так делать не нужно. очень плохо

Admin
ERROR: S client not available

Алексей
13.09.2018
07:50:19
фактически, когда этот launch завершается - в контейнере лежит результат

я и спрашиваю, как сделать хорошо

и как вообще это сделать работающим -.-

Alexey
13.09.2018
07:51:27
Всем привет. Взял в качестве di фрэймворка guice от гугла. Регистрирую мапперы в модуле примерно вот так bind<Mapper<Chat, domain.model.Chat>>().to<TelegramChatToChatMapper>() bind<Mapper<User?, domain.model.User>>().to<TelegramUserToUserMapper>() При создании контейнера ошибка что нет имплементации мапперов В качестве обертки над guice для котлина юзаю https://github.com/authzee/kotlin-guice это Никто не встречался с такой проблемой?

Алексей
13.09.2018
07:52:04
Примерно вот так
Так у меня нет доступа к Call

я могу только коллбэки прокинуть

и то, не в сам OkHttp, а в либу

Руслан
13.09.2018
07:52:57
я могу только коллбэки прокинуть
Этого и достаточно. Там вся фишка в suspendCoroutine и в том что ты дергаешь continuation в callbackах

Один метод написать и у тебя будут нормальные корутины в проекте

Алексей
13.09.2018
07:54:05
Пойду читать, что такое Continuation

@HeapyHop Правильно ли я понимаю, что suspendCoroutine блочит корутину пока на её объекте Continuation не вызовут resume[WithException]?

Руслан
13.09.2018
08:03:55
Да, все верно

Алексей
13.09.2018
08:04:04
хорошо, спасибо



Google
Mikhail
13.09.2018
08:07:47
я думал хэшкарты используют объект как ключ, а они походу хэш объекта юзают
а тебя не мучал вопрос, почему хэшмапы назвали ХЭШмапами?

Di7aK
13.09.2018
08:10:29
потому что ключ значение?

Никита
13.09.2018
08:20:05
Ребят, подскажите, есть ByteArray() с двумя элементами, как мне конвертнуть его в интовое число?

Igor
13.09.2018
08:21:12
Зачем тебе Throw, ты же их джавы это не вызовишь

Алексей
13.09.2018
08:21:37
Да и даже если не вызову - лучше предупреждать, что может произойти



Natasha
13.09.2018
08:41:05
Сегодня день программиста

так что ребята

с праздником

Konstantine
13.09.2018
08:41:50
Нада пить!

abdurrahim hassan
13.09.2018
08:45:45


Alexey
13.09.2018
08:46:51
Ребята, подскажите как в toothpick + kotlin зарегистрировать дженерик класс?

Страница 863 из 982