Sergii
Всем привет. Не кидайте камнями, может плохо объясняю, кипит голова. Как и где правильно хранить данные которые я получаю с БД? Которым классам запрещено иметь ссылку на объект хранилища? Программа - типо клиент для мессенджера. Архитектура MVVM В активности есть RecyclerView, который отображает чат комнаты. Чат комнаты для RecyclerView загружаются с БД в синглтон класс ChatRoomStorage А адаптер recyclerView имеет ссылку на ChatRoomStorage.getInstance(); Запускаю программу, активность говорит viewModel.loadChatRooms(); в это время крутится прогресс бар. viewModel вызывает метод и передаёт в него колбэк, так как будет выполняться работа репозитория в отдельном потоке. loadData(){ repository.loadChatRooms( o -> { isSuccess.postValue( (Boolean) o ); } ); } сам репозиторий в это время подгружает данные и кладёт их в ChatRoomStorage.getInstance().setData(data); Как видим при срабатывании колбэка - активность получит значение isSuccess, так как подписана на него и потом вызовет adapter.notifyDataSetChanged(); В общем такая тупая херня получилась. Суть в том, что эти подгрузки с БД нужны для синхронизации данных в случае, скажем, потери соединения с сетью, при восстановлении подключения оно должно подгрузить. А когда соединение есть то успешно работает веб сокет. Веб сокет вынесен в service, который по мере поступлений сообщений - должен писать их в хранилище и он же проверяет, если активность привязана к нему то он шлёт бродкаст ей, что бы она вызвала adapter.notifyDataSetChanged(); , а если мертва то сервис делает нотификацию. И вот сижу как баран и думаю, что почти всюду есть ссылки на хранилище и розосрано взаимодействие с ним. В одном месте в хранилище кладут данные, а совсем в другом вызывают adapter.notifyDataSetChanged(); Помогите советом, пожалуйста.
Посмотри сорсы того же телеграмма.
Николай
Посмотри сорсы того же телеграмма.
Беда в том, что я как бы не имею даже уровня джуна ни в java ни тем более в Android, а Kotlin так вообще не знаю. Я там мало что пойму
Sergii
Беда в том, что я как бы не имею даже уровня джуна ни в java ни тем более в Android, а Kotlin так вообще не знаю. Я там мало что пойму
Сори, всюду - понятие растяжимое, для одного мало, другой параноить начнет. То что обновление данных не связано с методами положить - ок, мало ли кто-то как-то другой метод звать начнет. База сама скажет когда изменилась. Так что с такого описания трудно что-то сказать. Лучше пока просмотреть готовое решение. Хотя бы как часто и что вызывается.
Sergii
Да и если нет уровня джуна, не берись за солянку
Николай
Да и если нет уровня джуна, не берись за солянку
что такое солянка? делаю дипломку бакалавра. В процессе и учу всё это
Sergii
Слишком много фреймворков придется прикручивать, да и одним патерном не обойдешься. Если уже диплом выбрал... Ну ок.
Sergii
Архитектура пугать будет если проект дальше развивать будешь, если просто сдать, пока не параной
central
С помощью чего обычно делают на андройде авторизация в api?
central
JWT или какие то его разновидности?
Сергѣй
А есть у кого-нибудь туториал под рукой или объяснение как сделать так в android (не в ndk - там то понятно) чтобы пока грузятся ресурсы стоял экран загрузки ( заглушка или как угодно назовите) ? Что-то я как не пытаюсь сделать ( всякие Dialog и setContentView ) он показывает всё только после того как всё (абсолютно всё) загрузит
Mike
Помогите мне пожалуйста как можно взять код кнопка плей из flesh play и создать программа на андроид
Найди группу, где общаются на твоём родном языке, и пиши туда. Не надо мучить людей гугл транслейтом.
Николай
Слишком много фреймворков придется прикручивать, да и одним патерном не обойдешься. Если уже диплом выбрал... Ну ок.
Да уже как бы много и сделано. Осталось прикрутить вот эту штуку с хранилищами и подгрузкой с бд и добавить немного красоты. Подгрузка с бд вызываеться только в случае восстановления соединения с интернетом, после успешной аутентификации и когда пользователь сам нажмёт кнопочку. В остальном за всё берётся сервис с веб сокетом.
Сергѣй
Нене, грузит из assets (тут то я ничего менять не хочу - это средствами android микро игра, но когда он к ней подгружает всё я хочу чтобы экран был не чёрный эти… как много 4 секунды ), а он пока всё не загрузит в onSurfaceChanged и в onSurfaceCreated ничего не показывает
Сергѣй
Чёрный экран, а потом уже игра и прочее
Сергѣй
Как можно сделать - открыли приложение и сразу поставили заставку, а всё остальное грузим, как догрузили маякнули и пошла игра - должна же быть такая опция, может кто-то делал такое ?
Сергѣй
И да, не надо давать советы сделать в ndk - у меня тут вся сложность в том, что именно для этой задачи ndk не подходит (и вот я мучаюсь с этим ужасом )
Sergii
Ну перед стартом чтения из асетсов для начала
Сергѣй
Там второй контекст и грузишь, а злесь что не делай он сначала всё грузит, есть примера какого нибудь аналога ?
Sergii
Хотя бы покажи как асетсы грузишь
Сергѣй
ДА какая разница как я их грузу - там несколько шейдеров компилируется и с десяток png картинок грузится
Сергѣй
private fun loadTextureL(name : String) : IntBuffer{ var decoder = PNGDecoder(assetMain.open(name)) var buffer: ByteBuffer = ByteBuffer.allocateDirect(4 * decoder.getWidth() * decoder.getHeight()) decoder.decode(buffer, decoder.getWidth() * 4, PNGDecoder.Format.RGBA) buffer.flip() val MyimageID = IntBuffer.allocate(1) glGenTextures(1, MyimageID) glBindTexture(GL_TEXTURE_2D, MyimageID[0]) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, decoder.getWidth(), decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer) glBindTexture(GL_TEXTURE_2D, 0) return MyimageID }
Sergii
Ну если пофиг на прогресс
Yergali
Ааа
Сергѣй
И так десять раз
Сергѣй
Ааа
? Это мне
Sergii
То просто перед началом показываешь прогресс и анимацию линии от 0 до 100 с продолжительностью 4 секунды
Сергѣй
В том, смысле что png ? Тут не принципиально, а как грузить не через ndk astc - я не нашёл, а возиться не хочу ( но да, грузить png и жаловаться на скорость - глупо )
Сергѣй
То просто перед началом показываешь прогресс и анимацию линии от 0 до 100 с продолжительностью 4 секунды
Он не показывает ничего - он это готов показывать только после загрузки всего, вот в чём мой главный вопрос .Как это сделать ( что не выставляй перед загрузкой и прочее) он ничего не показывает почему-то, а только чёрный экран, а когда загрузит, игру - и я progressDialog делал и какие-то решения находил https://gamedev.stackexchange.com/questions/57466/simple-android-loading-screen-when-using-opengl Но всё не работает
ᛖᚹᛋᛁᚱ
Кто сталкивался с проблемой, когда новый код не пушится студией
ᛖᚹᛋᛁᚱ
Это все ещё старые баги от Instant Run?
ᛖᚹᛋᛁᚱ
Я пол часа убил не понимая почему rv не скроллит вверх программно, а оказалось что студия просто забыла закинуть эту строчку
Sergii
Открыть диалог
Сергѣй
Я тоже так подумал и сделал - и ничего не показывает, тут же потом переходишь на onSurfaceCreated - и может оно как-то перебивает
Сергѣй
то есть, логика следующая, мы запускаемся и сначала проверяем и если одно условие- отрываем одно активити ( и там всё нормально), но если другое - идём и грузим игру, а вот игра не показывается пока не загрузит всё… и потому так ужасно
Sergii
Хотя за 4 секунды уже анр должен быть
Сергѣй
анр ? Не понимаю
Sergii
https://developer.android.com/topic/performance/vitals/anr
Sergii
Тут 2 варианта 1 поздно диалог отображает 2 у тебя есть юа поверх диалога (хотя это очень странно) Посмотри по логам когда шоу отрабатывает, когда стартует приложение или когда ты его фактически видишь на экране
Арсений
Привет, как сделать такое? Через recycler view, какие элементы должны быть?
Kopusha
cardview можешь взять для углов и теней
ᛖᚹᛋᛁᚱ
В целом, ответ да
Kopusha
"да, какие-то элементы должны быть!"
Future Franklin
https://pastebin.com/3sCiVDs1
Future Franklin
Future Franklin
Future Franklin
Вторая активити просто закрывается сразу же при передачи ArrayList'a
Сергѣй
Может это именно surface такое даёт. Если его скрыть до момента загрузки?
Вот тоже так думаю. Буду пробовать ( но и нашёл чьито решения смотрю их )
Mik
Замечал что не всегда отрисовывает вьюхи над surface.
Арсений
Привет, как сделать такое? Через recycler view, какие элементы должны быть?
А как добавлять разные элементы вроде текста в вертикальный список?
Сергѣй
нет, я это делалаю в onSurfaceCreated, но я уже нашёл пример ( сейчас посмотрю как тут и наверное повторю )
Александр
Вторая активити просто закрывается сразу же при передачи ArrayList'a
Первая же ссылка на SO даёт ответ как это всё правильно сделать: https://stackoverflow.com/questions/11340776/passing-a-list-from-one-activity-to-another
Ilya
Драсте. А почему ViewPager может продолжать держать старые интансы фрагментов, когда после поворота экрана я уже новые создаю?
Ilya
Ну при повороте экрана активность же пересоздаётся
Future Franklin
Первая же ссылка на SO даёт ответ как это всё правильно сделать: https://stackoverflow.com/questions/11340776/passing-a-list-from-one-activity-to-another
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference почему 0 если я всё заполнил ?
Ваня
Не юзай его на null и всё))
Ваня
Да
Александр
...
Александр
Мб лучше начать с изучения Java Core?
Future Franklin
Мб лучше начать с изучения Java Core?
та я просто переспрашиваю ибо эта передача списка меня уже заеб****
Future Franklin
почитал что нужно как-то индекс передать в другую активити , как сделать?
Future Franklin
ребят?
Maxim
Юзай экстра
Future Franklin
Юзай экстра
Можно пример как индекс передать?
Maxim
https://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-in-android-application
Александр
Можно пример как индекс передать?
https://www.google.com/search?newwindow=1&sxsrf=ALeKk01w5jnTT1apzcChi6O70GEUAK8bxQ%3A1582371365733&ei=JRJRXuCyLO2KmwW55I0Y&q=android+int+from+one+activity+to+another&oq=android+int+from+one+activity+to+another&gs_l=psy-ab.3..33i22i29i30.1013412.1021784..1021880...2.1..0.226.5084.6j33j2......0....1..gws-wiz.....10..0i71j0i67j0j0i131j35i362i39j35i39j0i20i263j0i203j0i22i30.PTkT2Y21cic&ved=0ahUKEwig2aDZiOXnAhVtxaYKHTlyAwMQ4dUDCAs&uact=5
Anonymous
Привет, помогите решить проблему,создал сплеш экран, установил параметры Для того чтобы спрятать заглавие приложения , а как его вернуть?
Anonymous
this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getSupportActionBar().hide(); setContentView(R.layout.activity_home); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Anonymous
как можно вернуть заглавие приложения?
Anonymous
мне на следующем layout он нужен
Dima
всем привет кто работал с firebase coud messaging? почему считает только отправки а всё остальное 0?
Anonymous
И да кто знает простые способы определения местоположения