#android #mvvm #repository
#Android #mvvm #репозиторий
Вопрос:
Я разрабатываю приложение для Android, и мне нужно сохранить некоторые изображения с URL-адреса во внутреннюю память смартфона. Теперь в репозитории я использую поток вывода файла и извлекаю uri с помощью Android FileProvider с контекстом приложения и сохраняю строку as в базе данных Room. Но этот подход нарушает шаблон MVVM, потому что репозиторий ничего не должен знать о контексте. Должен ли я вызывать службу из Activity / Fragment (возможно, на переднем плане, чтобы загрузка завершилась, даже если приложение будет уничтожено)? Есть другие методы?
Спасибо
Ответ №1:
Я полагаю, вы могли бы просто разрешить uri
в a ByteArray
или любой другой формат, который вы предпочитаете, где у вас есть контекст (действие или фрагмент), и передать его таким образом в Room
Комментарии:
1. Спасибо за комментарий! Мое приложение загружает из Google places api данные близлежащих мест, и из этих мест мне нужно загрузить изображения и предоставить uri, вернуться к просмотру, чтобы установить для них значение ImageView. Как вы предлагаете, я должен получить json в репозитории, передать json в представление, загрузить изображения и вернуться в репозиторий, чтобы сохранить Uri в базе данных room?
2. Ах, вы вернете a
json
, где вы вернете параметры изображений. Я думаю, вы можете просто сохранитьphoto_reference: String
каждое изображение в комнате. И используйте библиотеку загрузки изображений (например: github.com/bumptech/glide ) для загрузки изображения с URL-адресом3. Да, но проблема в том, что я должен сохранять эту фотографию, а не только загружать ее (для этого у меня есть свой собственный класс с кэшированием памяти и диска, и он работает просто отлично).
4. Обычно мы на самом деле не сохраняем изображения в БД, если вы хотите сохранить их локально, я бы сохранил их во внутреннем хранилище файлов
5. Я понимаю это, и я сохраняю Uri в БД, а не все изображение, которое мне нужно загрузить, и здесь возникает проблема: я знаю, как загрузить изображение, но мне нужен контекст, чтобы получить Uri с помощью file provider и папки, в которой он сохраняется.