Size: a a a

StartAndroid Ru Kotlin

2020 July 22

YR

Yevhen Railian in StartAndroid Ru Kotlin
@devsergio а используешь dependency injection какой нибудь?
источник

S

Sergey in StartAndroid Ru Kotlin
kodein
источник

СП

Сергей Переходов... in StartAndroid Ru Kotlin
Yevhen Railian
@devsergio а используешь dependency injection какой нибудь?
koin
источник

V

Vladushka in StartAndroid Ru Kotlin
Yevhen Railian
Начну с того, что уже flow становятся и горячими тоже. Появилcя MutableStateFlow , ведутся работы над SharedFlow.

Стандартный Flow холодный, потому что с момента создания объекта flow, он не генерирует значения до тех пор, пока не будет вызван метод collect. Только после вызова этого метода он начинает излучать значения и превращается в stream данных. Поэтому он и холодный.

Channel же может излучать значения с момента создания объекта. Ему не нужна никакая функция-триггер как в случае с flow.

Но channel сложны в использовании. Нужно правильно с ними работать, чтобы не было утечек памяти, они больше созданы для синхронизации корутин между собой. Flow же уже созданы для людей, поэтому их функционал сейчас расширяют.

Как то так
Спасибо за подробное объяснение!
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
Sergey
kodein
:))) я с кодеином мало работал.

Я так понимаю вопрос в принципе больше архитектурный :) поэтому вкратце:
- создаём интерфейс API с аннотациями retrofit для отправки events
- в kodein прописываем модуль, как этот EventsApi должен собираться
- в ресивере из метода onReceive дергаешь kodein, получаешь объект EventsApi и отправляешь с его помощью event, который я так понимаю извлекается из data: Intent
источник

S

Sergey in StartAndroid Ru Kotlin
Yevhen Railian
:))) я с кодеином мало работал.

Я так понимаю вопрос в принципе больше архитектурный :) поэтому вкратце:
- создаём интерфейс API с аннотациями retrofit для отправки events
- в kodein прописываем модуль, как этот EventsApi должен собираться
- в ресивере из метода onReceive дергаешь kodein, получаешь объект EventsApi и отправляешь с его помощью event, который я так понимаю извлекается из data: Intent
да , спасибо . примерно так и думал)
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
Sergey
да , спасибо . примерно так и думал)
Из советов, я бы использовал hilt.
К сожалению kodein это не dependency injector, это service locator
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
Vladushka
Спасибо за подробное объяснение!
Пожалуйста, надеюсь понятно объяснил
источник

РП

Рустам Планирович... in StartAndroid Ru Kotlin
Люди добрые помогите пожалуйста. Может у кого нибудь есть пример базы данных room со связанными таблицами, самый простой на пару таблиц . А то я сам так и не разобрался в них. Постоянно какие то ошибки. На гите смотрел, там слишком замудренные, не разобрался.
источник

СП

Сергей Переходов... in StartAndroid Ru Kotlin
Рустам Планирович
Люди добрые помогите пожалуйста. Может у кого нибудь есть пример базы данных room со связанными таблицами, самый простой на пару таблиц . А то я сам так и не разобрался в них. Постоянно какие то ошибки. На гите смотрел, там слишком замудренные, не разобрался.
читай гайды по рум, и ищи ошибки в гугл, ты явно не первый с ними стыкаешься
источник
2020 July 23

Y

Yaroslav in StartAndroid Ru Kotlin
Привет всем, делаю тестовое, и в нем нужно сделать вот так:

На первой вкладке получить список всех пород собак.  Вывести список в таблице. В случае если у породы есть подпороды отображать количество подпород в виде числа. При нажатии на ячейку открыть новый экран:
- если подпород нет, то должен открыться экран на котором надо отобразить все фотографии данной породы
- если подпороды есть, то открыть такой же список только с подпородами

То есть нужно в зависимости от содержимого строки в списке выбрать фрагмент со списком подпород или фрагмент с фотографиями? Как такое можно реализовать? Отчасти ExpandableListView похоже на то, что мне надо, но все же не оно
источник

V

Vladushka in StartAndroid Ru Kotlin
Всем доброго времени суток!
Код написан на котлине. Есть фрагмент, в котором прописана логика, позволяющая снять фото, видео на 10 сек  и получить координаты места съемки. Используются flow и channel`ы.
Запись видео начинается по нажатию на кнопку.
и есть код с вот такой структурой:
flow со съемкой фото.flatMapConcat{
videoFlow , в котором происходит delay на 10 сек, мапится фото с видео
locationFlow, где получаем локацию
} .flowOn(Dispatchers.IO)
           .collect {   }

Нужно останавливать видео по нажатию на кнопку. Мне подсказали, что там где сейчас delay на 10 сек нужно использовать merge(flowOf(""), flowOf("")).take(1), где 1ый  flow это delay, а 2ой flow это broadcastchannel.openSubscribtion, в который кидается ивент, когда нажимается кнопка паузы

Может кто-то подсказать пример на подобную тему, или более подробно объяснить, как реализуется то, что я описала выше. Потому что моих знаний и официальной документации по flow и channel явно не хватает
источник

T

Timur in StartAndroid Ru Kotlin
привет, что скажите на счет этой книге, может посоветуете что нибудь?
источник

D

Den in StartAndroid Ru Kotlin
Yaroslav
Привет всем, делаю тестовое, и в нем нужно сделать вот так:

На первой вкладке получить список всех пород собак.  Вывести список в таблице. В случае если у породы есть подпороды отображать количество подпород в виде числа. При нажатии на ячейку открыть новый экран:
- если подпород нет, то должен открыться экран на котором надо отобразить все фотографии данной породы
- если подпороды есть, то открыть такой же список только с подпородами

То есть нужно в зависимости от содержимого строки в списке выбрать фрагмент со списком подпород или фрагмент с фотографиями? Как такое можно реализовать? Отчасти ExpandableListView похоже на то, что мне надо, но все же не оно
А если создать два фрагмента, на одном recycleview с породами. Тап на итем и в зависимости куда тапнул заполняешь recycleview на втором фрагменте уже заранее подготовленным листом с подпородами. Но кажется, как-то топорно получитсч
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
Vladushka
Всем доброго времени суток!
Код написан на котлине. Есть фрагмент, в котором прописана логика, позволяющая снять фото, видео на 10 сек  и получить координаты места съемки. Используются flow и channel`ы.
Запись видео начинается по нажатию на кнопку.
и есть код с вот такой структурой:
flow со съемкой фото.flatMapConcat{
videoFlow , в котором происходит delay на 10 сек, мапится фото с видео
locationFlow, где получаем локацию
} .flowOn(Dispatchers.IO)
           .collect {   }

Нужно останавливать видео по нажатию на кнопку. Мне подсказали, что там где сейчас delay на 10 сек нужно использовать merge(flowOf(""), flowOf("")).take(1), где 1ый  flow это delay, а 2ой flow это broadcastchannel.openSubscribtion, в который кидается ивент, когда нажимается кнопка паузы

Может кто-то подсказать пример на подобную тему, или более подробно объяснить, как реализуется то, что я описала выше. Потому что моих знаний и официальной документации по flow и channel явно не хватает
Если видео на десять секунд и это прописано в videoFlow, зачем его останавливать? Чтобы была возможность записать видео короче и продолжить дальше логику или вообще отменить все?
источник

V

Vladushka in StartAndroid Ru Kotlin
Yevhen Railian
Если видео на десять секунд и это прописано в videoFlow, зачем его останавливать? Чтобы была возможность записать видео короче и продолжить дальше логику или вообще отменить все?
Чтобы была возможность записать видео короче и продолжить дальше логику
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
@v_ladyshka да и вообще я пока не совсем понимаю целесообразность использования flow в данному контексте. Flow используется для потока данных. Пока я вижу one-shot данные. 1 фото + 1 видео + 1 локация.

Пока из приведенного описания мне кажется более целесообразным переделать просто на suspend функции, хотя я могу не видеть всей картины в целом
источник

A

Aleksandr in StartAndroid Ru Kotlin
Yaroslav
Привет всем, делаю тестовое, и в нем нужно сделать вот так:

На первой вкладке получить список всех пород собак.  Вывести список в таблице. В случае если у породы есть подпороды отображать количество подпород в виде числа. При нажатии на ячейку открыть новый экран:
- если подпород нет, то должен открыться экран на котором надо отобразить все фотографии данной породы
- если подпороды есть, то открыть такой же список только с подпородами

То есть нужно в зависимости от содержимого строки в списке выбрать фрагмент со списком подпород или фрагмент с фотографиями? Как такое можно реализовать? Отчасти ExpandableListView похоже на то, что мне надо, но все же не оно
Не совсем понимаю зачем вам здесь ExpandableListView. Мне кажется вы не до конца понимаете задание. У вас есть один фрагмент со списком, второй с фотографиями.  Сразу отображаете фрагмент с породами, при клике по элементу списка если есть подпороды то открываете тот же фрагмент со списком только вместо пород отображаете подпороды, если нет подпород то отображаете фрагмент с фото. Надеюсь стало яснее
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
@v_ladyshka


interface MediaFrame {

   class Handler {

       private val isVideoRecording = MutableStateFlow(false)

       private suspend fun takePhoto(): Uri = TODO("take photo uri")

       private suspend fun takeVideo(maxDuration: Long = 10_000): Uri {
           isVideoRecording.value = true
           // todo start video recording
           withTimeoutOrNull(maxDuration) { isVideoRecording.first { !it } }
           isVideoRecording.value = false
           // todo stop video recording
           TODO("take video uri")
       }

       private suspend fun takeLocation(): LatLng = TODO("take location")

       suspend fun createMediaFrame(): MediaFrame {
           val photoUri = takePhoto()
           val videoUri = takeVideo()
           val location = takeLocation()
           TODO("do something with $photoUri, $videoUri & $location")
       }

       fun interruptVideoRecording() = let { isVideoRecording.value = false }
   }
}

suspend fun usage() {
   coroutineScope {
       val frame = with(MediaFrame.Handler()) {
           val frameDeferred = async { createMediaFrame() }
           delay(5000)
           interruptVideoRecording()
           frameDeferred.await()
       }
       TODO("do something with $frame")
   }
}
источник

YR

Yevhen Railian in StartAndroid Ru Kotlin
@v_ladyshka  апдейтнул
источник