
guga
19.08.2018
08:21:53
Нужно ещё больше не очевидного поведения в спринг дате

Aleksey
19.08.2018
08:32:11
привет, подскажите, пожалуйста, какой смысл в своем сервере авторизации на Spring?

Денис
19.08.2018
08:34:04

Aleksey
19.08.2018
08:35:18

Google

Денис
19.08.2018
08:35:41

Aleksey
19.08.2018
08:38:15
т.е. я могу авторизовать пользователя через дополнительный сервер oauth2 или через систему авторизации spring security. а как лучше?

Kostya
19.08.2018
08:55:52

ResQ_Net Moon
19.08.2018
08:59:36
кто знает у гугла есть http api для android?
java

Aleksey
19.08.2018
09:00:51

ResQ_Net Moon
19.08.2018
09:01:21
Типо HTTP url connection

Aleksey
19.08.2018
09:02:04

ResQ_Net Moon
19.08.2018
09:02:26
Ща гляну

Aleksey
19.08.2018
09:04:09

ResQ_Net Moon
19.08.2018
09:04:44

Alexey
19.08.2018
09:19:33

ResQ_Net Moon
19.08.2018
09:21:52

Никита?❄️
19.08.2018
09:36:29

Google

Богдан
19.08.2018
13:36:29
Доброго времени бытия господа. Нужна помощь. Вообщем суть в том что есть listview и recyclerview если тыкнуть по элементу из listview то он добавляется в recyclerview и удаляеться из listview и наоборот(как в Whatsapp при создании группы можно добавить участников кликнув по списку и убрать кликнув по списку добавленных)Вообщем если быстро удалять из recyclerview то программа выдает ошибку IndexOutOfBounsException
Если между удалениями пропускать 2-3 секунды то все работает нормально
Как думаете чем это может быть вызвано?
Гугл не знает что делать (возможно я плохо ищу) в других чатах никто не знает с чем связано такое поведение

Nikolay
19.08.2018
13:39:55
вообщем (с) это связано с прекрасным. отсутствие синхронизации нормальной как первый подозреваемый.

Bogdan
19.08.2018
13:41:38

Фёдор
19.08.2018
13:41:41
Что такое listview и recyclerview?

Богдан
19.08.2018
13:41:55
Да

ARDEV
19.08.2018
13:42:02

Фёдор
19.08.2018
13:42:11
это в андроиде такие?

Богдан
19.08.2018
13:42:16
Да

ARDEV
19.08.2018
13:42:17
да

Bogdan
19.08.2018
13:42:26

Богдан
19.08.2018
13:42:38
Гугл не знает что делать (возможно я плохо ищу) в других чатах никто не знает с чем связано такое поведение

Фёдор
19.08.2018
13:42:39
Я не уверен, но, кажется, в этом чате не очень большая концентрация андроид разработчиков

Bogdan
19.08.2018
13:43:05
bogdan вот @android_ru

Богдан
19.08.2018
13:43:20
Там не знают

Bogdan
19.08.2018
13:43:46
многопоточа есть ?

Фёдор
19.08.2018
13:44:19
эти элементы только в одном потоке используются?

Google

Богдан
19.08.2018
13:44:33
Да только в одном
Почему если удалять с перерывами в пару секунд все шикарно работает?

Фёдор
19.08.2018
13:46:13
В доке про это ничего нет?

Богдан
19.08.2018
13:46:21
Нет

Bogdan
19.08.2018
13:46:22
ну можно так, подебажить\логи, скинуть куданибуть код и скинуть сюда ссылку

Фёдор
19.08.2018
13:46:28
про правильное использование методов

Bogdan
19.08.2018
13:47:00

Богдан
19.08.2018
13:47:31
Пару секунд
java.lang.IndexOutOfBoundsException: Index: 2, Size: 1
at java.util.ArrayList.get(ArrayList.java:437)
at com.capp.messager.CreateNewChat$RecyclerAdapter.removeItem(CreateNewChat.java:107)
at com.capp.messager.CreateNewChat$RecyclerAdapter$1.onClick(CreateNewChat.java:145)
at android.view.View.performClick(View.java:6304)
at android.view.View$PerformClick.run(View.java:24803)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6600)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
Отчет

Богдан
19.08.2018
13:52:07
https://pastebin.com/7mm0xZw4

Фёдор
19.08.2018
13:54:33
мб оно всё-таки многопоточное? UI и бек как минимум. По какой-то причине при спаме команд с UI потока синхронизация отсутствует или отрабатывает некорректно.
Но я не разбираюсь в андроиде, просто мысли с т.з. джавы

Богдан
19.08.2018
13:55:38
Как это решить?
Или что загуглить?

Фёдор
19.08.2018
13:56:44
Синхронизацией?) как уже выше писали.
Мегакостылём можно этот ексепшн ловить, если он на логику приложения не влияет, но это реально не очень костыль и лучше поразбираться

Bogdan
19.08.2018
13:57:06

Фёдор
19.08.2018
13:57:09
Или что загуглить?
мб что-то вроде "как происходит синхронизация UI и остальных потоков в андроиде"

Богдан
19.08.2018
13:57:53

Google

Богдан
19.08.2018
13:58:40

Bogdan
19.08.2018
14:00:30
https://pastebin.com/7mm0xZw4
contacts.remove(i); тут не захватывается состояние, а потом используется другой лист contactList.setAdapter(listAdapter); ?
Спасибо.
я бы погуглил про адаптеры, и продебажил\прологировал их

Богдан
19.08.2018
14:03:00
contactList это listview

Dmitriy
19.08.2018
17:07:56

Maxim
19.08.2018
21:28:42
Народ, привет! У меня тут примерчик из книги бросает ConcurrentModificationException. И я вот никак не пойму как это вообще должно работать. Выглядит как broken by design, но не могли же такое в книгу запихнуть. Будут идеи у кого-нибудь?
https://github.com/xCASx/fp-in-java/tree/master/src/main/java/fp/in/java/recursion/memoization

Admin
ERROR: S client not available

Maxim
19.08.2018
21:29:31
14 строка Memoizer.java

Alexey
19.08.2018
21:32:37
Может concurrent hash map заиспользовать нужно было? https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util.function.Function-

Alexander
19.08.2018
21:32:39
А что в стектрейсе?

Maxim
19.08.2018
21:32:43
Ходил нат страницу со списком ошибок в книге, ничего подобного не нашел: https://pragprog.com/titles/vsjava8/errata

Alexander
19.08.2018
21:33:39
И как минимум хешмап не совсем безопасен для таких целей

Alexey
19.08.2018
21:34:47

Maxim
19.08.2018
21:34:56
Код однопоточный, concurrent имплементация ничего не изменит. Эксепшен бросает computeIfAbsent потому что пытается модифицировать мапу.

Alexander
19.08.2018
21:35:42


Maxim
19.08.2018
21:36:31
Если стектрейс кому-то чем-то поможет:
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1139)
at fp.in.java.recursion.memoization.Memoizer$1.apply(Memoizer.java:14)
at fp.in.java.recursion.memoization.RodCutter.lambda$maxProfit$0(RodCutter.java:22)
at fp.in.java.recursion.memoization.Memoizer$1.lambda$apply$0(Memoizer.java:14)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1138)
at fp.in.java.recursion.memoization.Memoizer$1.apply(Memoizer.java:14)
at fp.in.java.recursion.memoization.RodCutter.lambda$maxProfit$0(RodCutter.java:22)
at fp.in.java.recursion.memoization.Memoizer$1.lambda$apply$0(Memoizer.java:14)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1138)
at fp.in.java.recursion.memoization.Memoizer$1.apply(Memoizer.java:14)
at fp.in.java.recursion.memoization.Memoizer.callMemoized(Memoizer.java:17)
at fp.in.java.recursion.memoization.RodCutter.maxProfit(RodCutter.java:29)
at fp.in.java.recursion.memoization.RodCutter.main(RodCutter.java:36)
Но это вряд ли ?


Alexander
19.08.2018
21:36:44
Ты хотел узнать почему так происходит или проверить наш уровень?

Maxim
19.08.2018
21:37:41
Вопрос ко мне? Я пытаюсь понять что не так с предложенной имплементацией. Может кто с этой книгой уже работал, или сходу увидит что не так с этим подходом.

Google

Maxim
19.08.2018
21:37:59
Потому что я на данном этапе застрял.
Можно, конечно, пойти и твитнуть автору, но сначала неплохо бы поять, может сам баклан.

Alexey
19.08.2018
21:39:18
мне кажется ты делаешь мемоизацию это не так.
как ты предполагаешь что она будет работать?
callMemoized должен же вернуть не значение R, а T => R
иначе все запомненные значения у тебя проканаются между вызовов )

Alexander
19.08.2018
21:40:36
ваще странный код

Alexey
19.08.2018
21:41:05
аааа
все не так )
там рекурсия в функции вычисления
но тогда у тебя не мемоизируются промежуточные шаги
короче, проблема не в мепе, а в коде )
твоем

Alexander
19.08.2018
21:44:59
я вот даже смотрю на код и не понимаю как я должен это вызвать что бы оно сработало нормально

Alexey
19.08.2018
21:45:25
напиши уже задание

Maxim
19.08.2018
21:48:27
Мопед не мой. Код-то я набрал, но это в точности листинг из книги, я там не фантазировал.
А то что выглядит трюкаво, так о том и книга ?

Alexander
19.08.2018
21:48:52
как этим пользоваться надо
зачем это делать через статик метод

Maxim
19.08.2018
21:51:02
Смысл в том, что computeIfAbsent будет звать функцию каждый раз когда не будет находить значение в мапе (кеш мемоизации).
А мапа при вычислении будет проверять наличие значения в кеше.
И все это рекурсивно должно прийти к результату. Вот только рекурсия приводит к попытке модифицировать мапу после вызова метода из computeIfAbsent, что запрещено спецификацией.