Anatoliy
https://pastebin.com/D195QUrh подскажите в чем ошибка в работе с корутинами?я вызываю в init ViewModel функцию suspend - идёт загрузка либо из интернета, либо из базы данных. Из интернета грузит всегда корректно - ветка else. А вот из бд приложение как будто не успевает получить данные из бд и сразу грузит null в адаптер моего recyclerView ради которого всё это сделано. Когда прохожу всё в дебаге - видимо хватает времени на загрузку и всё работает корректно.
Oleg
Вопрос привычки, да и в сложных экранах довольно геморно читать 100 вложенных друг в друга лэйаутов, когда можно это отношениями описать. Но это ИМХО, никого не призываю Когда пара вьюшек, то конечно линеар удобнее без вопросов
влад
это в гитхабе?)
У меня такой проблемы не было, хз Верстаю без превью обычно, что линеары/релативы, что констрейнты, мб привык уже и понял как оно выглядит все
Mike
если не основная — то какая тогда?
Anatoliy
он получается всегда в сеть уходит при загрузке не из дебага или не в этом вопрос?
не в этом. он всегда ходит как надо по веткам.но при заходе в ветку с базой данных периодически возвращает мне null, хотя по логам видно,что там возвращается полноценный массив
Anatoliy
it must not be null пишет
Anatoliy
хотя null там и подавно нет. подозреваю что проблема с корутинами,но я не могу найти пока
Mike
хотя null там и подавно нет. подозреваю что проблема с корутинами,но я не могу найти пока
Ну как же нет? Ты создал лайвдату «листовые цветы», а в ней изначально null.
Anatoliy
Ну как же нет? Ты создал лайвдату «листовые цветы», а в ней изначально null.
Я создал лайв дату "Список цветочков", которая заполняется при запуске приложения сразу же
Mike
Я создал лайв дату "Список цветочков", которая заполняется при запуске приложения сразу же
Не заполняется она сразу же. Это не список цветочков, это списочные цветы)
Anatoliy
Не заполняется она сразу же. Это не список цветочков, это списочные цветы)
почему?блок init стартует,когда я запускаю приложение. он выполняется и я помещаю пришедшие данные в это лайв дату. С первым запуском-то всё работет - данные из ретрофита помещаются в эту лайв дату и всё корректно работает. А второй запуск, когда уже база данных должна вернуть данные нет
Anatoliy
в общем,в чем тут именно идеологическая ошибка кроме названия лайв даты?)
Oleg
в общем,в чем тут именно идеологическая ошибка кроме названия лайв даты?)
ты уверен что из БД возвращается у тебя не null? Глян стэйтрейс, откуда у тебя null приходит в observer
Oleg
в функции loadInDD() есть лог перед return . он показывает не null
А зачем вообще loadindd возвращает livedata, если там не нужно никакой подписки. Да и в репе иметь ливдату оч странно. И проверь что null в observer приходит именно после того, как ты берешь данные из бд, а не до этого. Инициализация ливдаты все таки происходит с null внутри, данные уже позже туда приходят
Anatoliy
при этом в любом случае надо сделать асинхронный запрос. либо в бд либо в интернет. А как гарантировать что это произойдет быстрее чем обсервер дёрнут функцию во ViewModel- мне непонятно. Майки написал,что observe происходит сразу в отличии от асинхроннщины , видимо в этом и есть проблема
死は終わりではない
как называется код, типо когда прописал данные айтема и нажимаешь на айтем высвечивается именно его данные? айтемов с разными данными много будет, например когда заходишь в чей то профиль тот же код вроде только с пользователями
Vitaly
Вопрос. В проекте юзается androidx, как сделать второй билд с android.support, чтобы собирать для ниже 10го андроида?
Matvey
не понял
Dmytro
не понял
прав скорее всего нет
Matvey
прав скорее всего нет
в локальной папке С?
Vitaly
зачем? анроидХ и на нижних тоже будет работать
сори не, понимаю, просто оно после смены targetSDK даже не билдится
Dmytro
в локальной папке С?
наверное, написано, что не может записать, попробуй другое место
ARTUR
а тут все ок
ARTUR
ребят кто сможет помочь ??
Dmytro
ребят кто сможет помочь ??
Никто кроме тебя самого) бери и используй инструкции. Подключил ты фаербейс сдк, а гайд по пушам ты прошел? как ты его отправляешь, где получаешь, слишком много переменных
Vitaly
а что на что ты менял? и зачем?
ну я хочу чтобы приложение запускалось на android 8. в билде стоит compileSdkVersion = minSdkVersion = targetSdkVersion = 29. если меняю minSdkVersion 26 то оно собирается, но падает, как я понимаю, из-за androidx
Vitaly
а из-за чего краш тогда?
Anatoliy
launch, withContext и postValue асинхронные. А вот observe происходит сразу.
каким приёмом можно гарантировать сначала выполнение данных асинхронных операций и только потом observe?
Damir
Я вот когда приложение создал впервые, сделал репозиторий и запушил, как начальную точку. Сейчас написал много кода, решил закоммитить и запушить еще раз Из-за приватности мне выдало ошибку, я решил установить SSH и короче что-то сделал, теперь у меня приложение пустое Можно восстановить как-нибудь? :)
Anatoliy
А почему бы тебе не засунуть пустой список в конструктор лайвДаты?
работа приложения всё равно не корректная . мне бы именно. Я же интересуюсь именно тем,как данные вернуть быстрее observable. - какие способы для этого есть. Или вообще по-другому работать с observeble. не в init,например, пытаться в лайвДату асинхронно запихать данные из бд
Damir
чё сделал? Кстати, см. @git_ru
Please make sure you have the correct access rights and the repository exists. была ошибка, решил загуглить, вроде как понял нужно SSH создать, попробовал создать. В настройках гитхаба попробовал добавить, вышла ошибка. После этого увидел, что полностью приложение началось с начального пуша.
Anatoliy
Ну ты просто не обрабатывай null, в че м проблема то?)
я не могу не обрабатывать null.если я делаю myAdapter.setData(it),а it - null, то я иду лесом
Oleg
я не могу не обрабатывать null.если я делаю myAdapter.setData(it),а it - null, то я иду лесом
Проверку на null сложно добавить? Вообще семантически ещё правильнее майк написал выше по empty list
Anatoliy
Проверку на null сложно добавить? Вообще семантически ещё правильнее майк написал выше по empty list
я понимаю,что можно добавить проверку на null - но это не корень проблемы. Если она будет, то данные просто не дойдут до адаптера. В чём я не прав?
Matvey
и так на всех эмуляторах
Oleg
напольный списочный цветок =)
Фак, чертова автозамена))
ARTUR
что из 7 тыл человек ,никто не может подсказать )))
Vitaly
Anatoliy
Когда будут — дойдут. А когда null, доходить нечему.
cпасибо за наводки, сначала не понял - новичок. Премного благодарен
Anatoliy
В том, что как только данные подгрузиятся из бд, то придет напольный список
Спасибо за помощь.для меня на данном этапе развития это был неочевидный факт
Vadim
https://pastebin.com/U7y46zig
Caused by: android.content.res.Resources$NotFoundException: Drawable android:color/tertiary_text_dark with resource ID #0x1060010 Caused by: android.content.res.Resources$NotFoundException: File res/color/tertiary_text_dark.xml from drawable resource ID #0x1060010
Vitaly
кастомный шрифт используете?
TypefaceSpan использую, если не вызвать, запускается, но что-то отображается не так, как в 10
Vadim
Vitaly
ну причина найдена. а дальше погуглите что с Typeface не так
Да понятно что не так - он не поддерживается на api26
Vitaly
Vitaly
Подскажите, это проблема телефона или совместимости? На фотор android 8, на скрине 10, как и должно быть. Пока нет возможности запустить на другом или эмуляторе
Dmitry Levchenko
Dmitry Levchenko
Ребят, переписал код с тредов на корутины(выше) , и все стало работать гораздо медленнее. В чем ошибка?
Anonymous
ребят, как можно дождаться bindService?
Anonymous
асинхронный же вызов
Anonymous
а, понял, интерфейс ServiceConnection есть
Dmitry Levchenko
https://kotlinlang.org/docs/reference/coroutines-overview.html Отличный гайд И всегда начинать советую с офф доки
Мне показалось, что я разобрался, но видимо нет. Можешь помочь плиз?
Dmitry Levchenko
Readinfo быстрая операция, можно даже в ui потоке запустить и будет гораздо быстрее чем в корутине. Получается проблема в withContext?
Egor
Попробуй Dispatchers.IO
Vitaly
заменил android:colorBackground на android:background и всё стало ок)))