2016-03-31 2 views
0

У меня есть фотогалерея в моем приложении, не слишком отличающаяся от фотографий Facebook. У меня есть две основные взгляды:Как передавать большие данные между действиями?

  • PhotoGalleryActivity бесконечный список фотографий показаны в хронологическом порядке. При нажатии на нее вы попадаете в подробный вид.

  • PhotoDetailView - это в основном пейджер с фотографиями и для каждой фотографии, он также показывает пользователя, который его загрузил. Нажав на пользователя, вы перейдете к другому PhotoGalleryActivity, в котором перечислены все фотографии, которые пользователь загрузил.

Чтобы показать PhotoDetailActivity, мне нужно передать список фотографий с PhotoGalleryActivity к нему. Фотообъект - это просто список URL-адресов и пользовательский объект.

Я изучил различные возможные решения, но ни один из них не соответствовал моему счету. Вот те, которые я нашел, и поэтому они не будут работать (пожалуйста, поправьте меня, если я ошибаюсь):

  • Намерение: Это не работает, так как данные могут получить большой (1mb это предел для прохождения данные через намерение). Мне может потребоваться передать 10 000 фотографий или 100 000 фотографий. И из-за этого я не могу даже сохранить его во время изменений ориентации (я не прав?).

  • Singleton + теги: Поскольку пользователь может сохранить веб-кратному PhotoGalleryActivity, я могу использовать теги так, что PhotoDetailActivity может просто взять список фотографий с помощью тега, который PhotoGalleryActivity проходит через Intent. Но проблема возникает, когда приложение убито. Синглтон теряет данные, поэтому я не могу это сделать. (Я чувствую, что мне может не хватать обходного пути с этим прецедентом).

  • База данных: я мог бы сохранить их в базе данных, но это становится сложно поддерживать, так как первые PhotoGalleryActivity показывают фотографии от всех пользователей. Затем я нажимаю на фотографию, нажимаю на пользователя, который загрузил фотографию, и начал просматривать фотографии пользователей. Теперь, когда я возвращаюсь к первому PhotoGalleryActivity, хронологически последняя фотография в базе данных теперь является последней фотографией этого пользователя, поэтому мои данные становятся испорченными. (Я могу придумать обходные пути для этого, но похоже, что он может быстро запутаться).

Я надеялся, что у кого-то есть опыт с этим и есть идея для решения.

+0

Я не понимаю, почему подход к базе данных является проблемой. Если вас беспокоят временные метки, вы можете просто отсортировать какое-то значение, чтобы получить заказ –

+0

, что вы подразумеваете под этим? – Sree

+0

Любая популярная база данных имеет некоторый порядок или сортировку ... Что вы подразумеваете под «хронологически последней фотографией в базе данных, теперь является последней фотографией этого пользователя, поэтому мои данные становятся испорченными» –

ответ

0

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

Я думаю, что сервис не имеет ограничения на размер данных, более надежный, чем singleton, гибкий, чем Database.

+0

Не могли бы вы разработать? – Sree

+0

В Интернете есть много обучающих программ, которые вы можете использовать в Google «Android activity bindService», вот некоторые из них: [пример привязки/отвязывания службы] (http://stackoverflow.com/questions/8341667/bind-unbind-service-example- андроид), [Пример подключения в Android] (http://www.truiton.com/2014/11/bound-service-example-android/). –

0

Я думаю, что лучшим подходом было бы использовать базу данных. Он будет поддерживать данные, и действия будут относительно быстрыми. Вы можете использовать различные типы библиотек ORM, такие как Realm, чтобы упростить интерфейс к базе данных. Затем вы сможете легко запросить данные, которые вам нужны на каждой странице (я предполагаю, что вы будете использовать пейджер представления для галереи.

+0

Это не так просто. Если бы была только одна галерея, все в порядке. Но рассмотрите это: запустите приложение, откройте главную галерею, в которой отображаются все фотографии, нажмите фотографию, чтобы перейти к подробному представлению, коснитесь пользователя, который открывает другую галерею, пользовательские фотографии. Теперь последняя фотография (по метке времени) в базе данных - это последнее фото, которое было выбрано, когда мы были в галерее пользователя – Sree

0

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

Смежные вопросы