Norim
Ну положительные стороны очевидны, да. Так ты юзаешь навигатор, но не хочешь юзать safe args?
Ну пока смотрю так на него, нужно его вводить или не нужно, потому что в гугл примерах его что-то особо нет
Norim
Обычно там бандл засовывают и все
Norim
Я как раз это в курсе от гугла и взял себе на вооружение)
Я думал может они еще в разработке и поэтому нет массового применения в гугл примерах хз
Norim
Пока думаю, чтобы потом не тратить время и не переделывать все еще если что
Evan
Я думал может они еще в разработке и поэтому нет массового применения в гугл примерах хз
Да не, я думаю это уже давно релизная фишка, курс был от 2018 года)
Roman
Ленивая инициализация переменной, в случае коина возвращает viewmodel
а какой в ней смысл если можно просто проинициализировать?
Nazar
а какой в ней смысл если можно просто проинициализировать?
Ну например можна сделать так : private val planningText by lazy { findViewById<TextView>(R.id.planning_text) } При первом вызове будет вызван findViewById, а при последующих будет возвращатся значение
Roman
так у меня by inject cnjbn
Mike
Почему?
https://github.com/ReKotlin/ReKotlin/issues/20
Mike
потому что нужно хоть немножечко представлять, как работает инструмент, которым пользуешься
Mike
в by lazy хорошо заворачивать какое-нибудь IO. А в случае с findViewById, сам lazy оказывается дороже, чем непосредственная инициализация в onCreate
Ярослав
https://github.com/ReKotlin/ReKotlin/issues/20
1 проблема только в фрагментах, в которых вью пересоздаётся 2 проблема syncronized решается передачей в lazy флага NONE
Mike
1 проблема только в фрагментах, в которых вью пересоздаётся 2 проблема syncronized решается передачей в lazy флага NONE
первая — это какая? synchronized решается, но получается слишком длинно. А анонимный класс и дорогой объект проперти остаются.
Mike
и вообще можно свой аналог написать
можно, но в нём есть пара багов
Ярослав
можно, но в нём есть пара багов
могу только один предложить не, если использовать только внутри других View, то не вижу багов
Denis
Aleksey
привет! при Don’t Keep Activities = true результаты после startActivityForResult не долетают до вызывающего экрана. есть ли какой-то способ это починить? или… может, этого не бывает на реальных девайсах?
Ярослав
findViewById может null вернуть
если там нул, значит разраб накосячил и пусть делает так, чтобы там не было нула
Mike
0. Очередной indirection с прыжками по указателям. Впрочем, у стокового lazy та же проблема. 1. Если вьюха опциональная, то оно всю жизнь будет считать себя неинициализированным и на каждый get снова искать её. 2. Запись ссылки на каждое чтение (записи ссылок дороже, чем записи примитивов, из-за write-барьеров) 3. Как озвучил Денис, тип заявлен как не-нуллабельный, а по факту...
Denis
и вообще можно свой аналог написать
а чем это лучше котлиновского lazy?
Ярослав
1 вот тут не понял, тут либо инициализация не нулом либо исключение 2 помоему это мелочи, мы же не на с++ драйвера пишем)
чё по факту? чё? я как разработчек должен позаботиться о том, чтобы вьюхи, которые я ищу, были не нул, иначе значит я где-то накосячил и должен получить в лоб исключение!
Ярослав
потому что кейсов, когда вью опциональна лично в моём проекте нет, на работе в компании в одном только месте
Mike
чё по факту: опа нихуя. Ты удалил гланды через анус, получилось так себе.
Ярослав
зачем предусматривать null, если должно быть не null, а его наличие == косяк разраба?
Mike
ты сам сказал выше, что это не всегда так
Ярослав
ты сам сказал выше, что это не всегда так
в моём проекте вскегда, на работе только в 1 месте, и только в том месте я не использую LazyView, потому что там null это не ошибочный кейс
--------
привет! при Don’t Keep Activities = true результаты после startActivityForResult не долетают до вызывающего экрана. есть ли какой-то способ это починить? или… может, этого не бывает на реальных девайсах?
много где слышал, что такой кейс никогда не встретишь на устройстве, если принудительно в настройках этот флаг не включишь
Denis
и чем этого лучше by lazy, я до сих пор не понял
Ярослав
понятное исключение) Желательно, чтобы исходя из Api было понятно, что там что-то может пойти не так
по сути мой LazyView это аналог requireContext(), разраб, который его вызывает должен быть уверен, что контекст есть и исключения не будет
Ярослав
Ничем.
я не тебе отвечал
Denis
вот чем, "получается слишком длинно"
там тоже можно без синхронайза
marat
как в android studio можно сделать графики 0xy
Mike
вот чем, "получается слишком длинно"
ммм, fun <T> lazyView(init: () -> T) = lazy(NONE, init)
Mike
я не тебе отвечал
Ты меня процитировал.
Mike
как в android studio можно сделать графики 0xy
Поиск находится в другой вкладке.
Aleksey
Mike
метод не вызывается
есть minimal reproducer или это только при каком-то особенном сеттинге?
Mike
Don’t Keep Activities = true + AndroidX
в смысле Androidx? Это только в AppCompatActivity происходит?
Aleksey
в смысле Androidx? Это только в AppCompatActivity происходит?
этого я не проверял, но в такой конфигурации проблема есть)
Михаил
всем привет! И вот встал вопрос о написании нового pet project. Неделю уже голову ломаю над темой. Может где-то есть подборки тем? Никто не видел?
Almas
Дорогие коллеги помогите сделать запрос с body в виде form data
Mike
@ProgerD @mobile_jobs @android_jobs
Almas
------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="filedata"; filename="WhatsApp Image 2020-04-19 at 20.38.02.jpeg" Content-Type: image/jpeg ------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="relativePath" ------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="renditions" doclib ------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="include" allowableOperations ------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="autoRename" true ------WebKitFormBoundaryKrIANkmtjTr00JyA Content-Disposition: form-data; name="nodeType" cm:content ------WebKitFormBoundaryKrIANkmtjTr00JyA--
Almas
как это правильно сделать
Almas
я делаю так val requestBody: RequestBody = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("filedata", fileName, requestFile) .addFormDataPart("relativePath", "") .addFormDataPart("renditions", "") .addFormDataPart("include", "doclib") .addFormDataPart("autoRename", "allowableOperations") .addFormDataPart("nodeType", "true") .build()
Mike
как это правильно сделать
убрать мультипарт
Almas
Almas
подскажешь как это сделать на ретрофите
Lev
всем привет. drawer в андроид нативный компонент?
Ярослав🇺🇦
Мезу вроде сгорели
Dmytro
Ребят, подскажите тулзу, плагин для транслирования экрана на комп?
Anonymous
подскажешь как это сделать на ретрофите
А что сложного? Это же просто строка
Almas
А что сложного? Это же просто строка
да нету опыта вот что я написал val builder = MultipartBody.Builder() builder.setType(MultipartBody.FORM) builder.addFormDataPart("filedata", fileName!!, requestFile) builder.addFormDataPart("relativePath", ""); builder.addFormDataPart("renditions", "doclib"); builder.addFormDataPart("include", "allowableOperations") builder.addFormDataPart("autoRename", "true") builder.addFormDataPart("nodeType", "cm_content") val requestBody = builder.build() и сам реквест @Headers("Content-Type: multipart/form-data") @Multipart suspend fun uploadTaskAttachment( file: MultipartBody )
Almas
А что сложного? Это же просто строка
можешь подсказать что может быть не так
Дмитрий
Может кто подсказать в чем проблема манифеста?
Дмитрий
Нету такой инты
Верное решение, если 2 часа не можешь понять почему не работает, перезагрузи студию
Almas
Парни помогите
Almas
да нету опыта вот что я написал val builder = MultipartBody.Builder() builder.setType(MultipartBody.FORM) builder.addFormDataPart("filedata", fileName!!, requestFile) builder.addFormDataPart("relativePath", ""); builder.addFormDataPart("renditions", "doclib"); builder.addFormDataPart("include", "allowableOperations") builder.addFormDataPart("autoRename", "true") builder.addFormDataPart("nodeType", "cm_content") val requestBody = builder.build() и сам реквест @Headers("Content-Type: multipart/form-data") @Multipart suspend fun uploadTaskAttachment( file: MultipartBody )
Valery
Все привет. Такая проблема. Application is null на точках входа. То есть при первом обращении к апп из launch activity или ресиверов. Странно, но по логам так. Причем краши отображаются только в гугл консоли. И в большинстве для андроид 6 и 9. Остальные версии единичны. В интернетах существует такая проблема у людей, но решения нет. Похоже, что application стартует позже, чем активити. Тестировал на эмуляторах с рестартами/сворачиваниями/убиваниями приложения, но кейс повторить не удалось. Может у кого была похожая проблема ava.lang.RuntimeException: 1. at android.app.ActivityThread.handleCreateService (ActivityThread.java:2862) 2. at android.app.ActivityThread.access$1900 (ActivityThread.java:150) 3. at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1427) 4. at android.os.Handler.dispatchMessage (Handler.java:102) 5. at android.os.Looper.loop (Looper.java:148) 6. at android.app.ActivityThread.main (ActivityThread.java:5417) 7. at java.lang.reflect.Method.invoke (Native Method) 8. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:728) 9. at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Caused by: java.lang.NullPointerException: 1. at com.my.myapp.notifications.data.services.MyFirebaseMessagingServices.<init> (MyFirebaseMessagingServices.java:77) 2. at java.lang.Class.newInstance (Native Method) 3. at android.app.ActivityThread.handleCreateService (ActivityThread.java:2859)