169 похожих чатов

Вот Я работаю с фотками. По факту сохранить в память

Я могу только там где есть контекст (Активити, Фрагмент). Если Я хочу это делать из ВМ, то мне надо туда пробрасывать контекст и делать AndroidVM. А если Я хочу это делать из репозитория? Мне и туда как-то пробрасывать контекст? Могу ли Я без каких-то проблем с точки зрения андроида и проблем с точки зрения "чистой архитектуры" просто при старте приложения в активити создать свою папку, и сохранить ее путь в какой-то объект-утилиту?

32 ответов

16 просмотров

Во VM в целом не так страшно. Хотя можно и без этого обойтись насколько я помню

Ilia-Gaevskii Автор вопроса

А в репозитории? И буду рад ,если сможете ответить на другие вопросы..

В репозитории контекст не должен быть. Он работает с бд и сетью, а не с памятью устройства

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

Ilia-Gaevskii Автор вопроса

А если Я хочу из сети сохранить в память телефона?

Разделяй уровни ответственности. Например, один уровень ходит в сеть и что-то возвращает, а другой эти данные умеет записывать. Не вали всё в одну кучу.

Этим занимается отдельный класс

Сори что влезаю, а почему бы не сделать некую обертку, по типу как ResourceProvider, тока назвать допустим FileManager и его иплементация будет содержать контекст и сохранять фото/файл и тд?

Во точно) так и сделано у меня было )

Ilia-Gaevskii Автор вопроса

То есть по факту, создать какой-то синглтон, в котором у меня будет работа с фотками, и в котором будет контекст?

Да

У тебя di настроен в проекте?

Ilia-Gaevskii Автор вопроса

Да , Коин

Не синглтон точно. инжектится там где нужно каждый раз новый инстанс Хотя если applicationContext, то можно и singleton Смотри главное, чтоб активити контекст или ui context не утек в синглтон (Поэтому собственно и опасно контекст использовать вне фрагментов и активти)

А, коин, там скоупы есть вообще ?

Ilia-Gaevskii Автор вопроса

Да, но контекста нет

Я видел часто в проектах, что делают AndroidModule в дагере и провайдят контекст. Но эта ведь та же утечка, если помечают какой то AppScope анотацией?

Нет, если у тебя applicationContext, он ведь живет пока живет приложение

Так утечка может быть разве вне жизни приложения?)

Нет

Application Context It is an instance that is the singleton and can be accessed in activity via getApplicationContext(). This context is tied to the lifecycle of an application. Не может быть

Нет, говорю в общем, если хранить просто ссылку на контекст в репозитории

Но лучше, если доменная логика не знает ничего или знает по минимум об андроид классах, как-то раз был у меня случай, когда приходилось поддерживать одновременно андроид + десктоп на jvm и там в domain не было никаких андроид классов вообще

А куда его инжектят? В вм? Вм как бы в презентейшн слое находится, но не помню чтобы она знала о UI или лайфсайкл компонентах

В вм инжектить контекст нет смысла, есть AndroidViewModel

А контекст он откуда берет? Из приложения?

Аппликейшнконтекст?

В каком смысле?

Сам application имел ввиду

Делается синглтон и туда инжектится appContext. А в vm можно использовать этот класс. Это не будет считаться ui компонентом

Верно, но такое себе плодить двадцать синглтонов не?

Такое себе конечно, но если знаешь меру, то нет. Да и можно сделать не синглтон, если общий стейт не нужен, главное чтобы этот класс инкапсулировал работу с памятью и файлами

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта