
Жабра
30.01.2018
15:20:48

Andrew
30.01.2018
15:26:24
а) пометить саму loadUsers как suspend
б) превратить Deferred, который возвращается async`-ом, в Guava `ListenableFuture / Java 8 CompletableFuture с помощью соотсветствующей зависимости из kotlinx.coroutines.

Жабра
30.01.2018
15:27:34
Спасибо, но не совсем понял, зачем нужно б)

Andrew
30.01.2018
15:27:55
ой, а зачем вы users присваиваете из async? Верните лучше её как результат блока и напишите val users = job.await()

Google

Andrew
30.01.2018
15:28:26

Жабра
30.01.2018
15:28:45

Andrew
30.01.2018
15:30:20

Badya
30.01.2018
15:31:15
Читайте документацию коллега)

Жабра
30.01.2018
15:31:37
Пишет, что возвращается Any, скорее всего из-за try catch. Так, а стоп... Если я помечу loadingUsers как suspend, мне придётся везде оборачивать её вызов в корутину.

Badya
30.01.2018
15:32:08
На данный момент корутина выглядит бессмысленно в этом методе так как встанете на ожидание в месте вызова await()

Andrew
30.01.2018
15:32:15
Воооот, оттуда и взялся пункт б ;)

Жабра
30.01.2018
15:33:00

Badya
30.01.2018
15:33:29

Andrew
30.01.2018
15:33:55
Последнее выражение является implicit return, что runOnUiThread возвращает?

Жабра
30.01.2018
15:34:55

Google

Andrew
30.01.2018
15:35:01
Я бы, пожалуй, не заворачивал тело async в try / catch, а завернул в него .await()

Badya
30.01.2018
15:35:31
await() заблочит ваш текущий тред (скорее всего это UI)

Andrew
30.01.2018
15:35:56
await -- это саспенд-функция, она не блочит по определению.

Quantum Harmonizer
30.01.2018
15:35:57

Badya
30.01.2018
15:36:12
Вот тот что на скрине)

Andrew
30.01.2018
15:36:45
Вот он и не блочит. Он только саспендит и только в корутине.
Советую покурить документацию, ссылки на которую висят в README.md в kotlinx.coroutines.

Жабра
30.01.2018
15:40:35

Badya
30.01.2018
15:40:48
Вам либо сделать саспенд функцию придется, либо прям тут вставлять runBlocking
Ну или launch(UI)

Жабра
30.01.2018
15:42:01
Второй вариант, насколько я понимаю, остановит ui поток

Badya
30.01.2018
15:42:15
Не остановит, а заблокирует)

Жабра
30.01.2018
15:42:24
Ну да, я об этом.

Badya
30.01.2018
15:42:33
Сорян - я бэкендер)

Andrew
30.01.2018
15:54:19
Дык а есть у вас Guava в проекте? Или хотя бы streamsupport-cfuture?
В общем, начните плясать от того, что можно написать
val users: ListenableFuture<ArrayList<User>> = async(CommonPool) { ServerHandler.selectUserList(last, size) }.asListenableFuture
Дальше вопрос только в том, что ещё вы уносите вовнутрь корутины, а что оставляете на фьючерах.

Roman
30.01.2018
16:37:52
Еще просьба не постить код скриншотом, совершенно нет желания писать все это чтобы показать что нужно написать чтобы код заработал. Лучше пользоваться сервисом https://gist.github.com/

Жабра
30.01.2018
16:39:53

Roman
30.01.2018
16:43:09
Ну теоретически код написан не правильно и его проще поправить, чем рассказывать пол часа что да как.

Andrew
30.01.2018
16:48:36
Я попробовал поправить, но не смог, ибо после десктопного runBlocking не смог ментально смигрировать на launch(UI).

Google

Andrew
30.01.2018
16:48:40
Но да, код полезно пастить текстом.

Виталий
30.01.2018
17:03:01
подскажите как загнать в двумерный масиы null, но в дальнейшем там будут и null и Tile()
val table: Array<Array<Tile?» = Array(fieldRows, { Array(fieldColumns, { null }) })
found:
Array<Array<Nothing?»

Roman
30.01.2018
17:06:07
Тип определен верно. В чем проблема?
создать массив из nullable можно функцией arrayOfNulls<Tile>(n)

Виталий
30.01.2018
17:07:35
спасибо)
жесть какая трехмерный массив
val level: Array<Array<Array<Tile?>>> = Array(LAYERS_IN_FIELD, { Array(fieldRows, { arrayOfNulls<Tile>(fieldColumns) }) })

Badya
30.01.2018
17:35:44
Уже игры на котлине пишут я смотрю)

Alex
30.01.2018
17:38:45

Bogdan
30.01.2018
17:39:37

Виталий
30.01.2018
17:40:36

Bogdan
30.01.2018
17:40:47

Виталий
30.01.2018
17:41:09

Bogdan
30.01.2018
17:41:23
да и если такой масив мудет велик может много памяти скушать
двемерный масив можно перефразировать как - масив масиве

Виталий
30.01.2018
17:41:57

Bogdan
30.01.2018
17:42:18

Google

Bogdan
30.01.2018
17:42:30
300*32
чисто за нул??
тоесть ты получаешь оверхед там где его можно избежать

Виталий
30.01.2018
17:44:07
десяток киобайт на ссылки... мы ж не на спектруме прогаем )

Bogdan
30.01.2018
17:45:54

Badya
30.01.2018
17:46:15
чем плохо ?
Обрабатывать алгоритмом со сложностью O(n^3)..

Bogdan
30.01.2018
17:46:25
а у тебя еще третий параметер параметер появляется
нада матан подтянуть

Like
30.01.2018
17:47:23
матан? ?

Bogdan
30.01.2018
17:47:41
связаный список в итоге может быть быстрей, хотя тут хз

Виталий
30.01.2018
17:47:45
обрабатываться будет только 2мерные массивы

Bogdan
30.01.2018
17:48:06
матан? ?
да вычислять сложность алгоритмов, там матан, и логарифмы замешаны
зачем сразу писать говнокод?

Виталий
30.01.2018
17:49:10

Bogdan
30.01.2018
17:49:25
можно ввести ManagerLayers
+- простой класс, с похожими алгоритмами что уже придуманы

Виталий
30.01.2018
17:50:15

Google

Bogdan
30.01.2018
17:50:36
профит котлина)

Kirill
30.01.2018
17:51:16
Кто вас заставляет обрабатывать трёхмерную структуру алгоритмом O(n^3)?

Badya
30.01.2018
17:51:20
Тебе может быть проще на двумерном массиве хранить в объекте его высоту

Alex
30.01.2018
17:51:34
Кстати, есть за что Котлин покритиковать
Массивы неудобные
Нету дефолтных из джавы
Поэтому я и не пишу раунды на кодфорсе или еще где на Котлине

Bogdan
30.01.2018
17:52:50
кстате, старые дяти из c говорят что любой n-мерынй массив можно переобазовать в n-1-мерный масив

Badya
30.01.2018
17:53:07
Я рад что они многословные - сразу хочется чёт приличней написать) вспоминая list comprehensions...

Bogdan
30.01.2018
17:53:21
люди боле 2-х мерного масива юзать не будут, да и толку нет

Alex
30.01.2018
17:53:55
Но очень редко
А так - шикарный язык

Vladimir
30.01.2018
17:54:15

Bogdan
30.01.2018
17:54:41

Alex
30.01.2018
17:54:56