Как передать ссылку в Android-приложении?

Я знаю, что есть простой механизм для передачи объекта между действиями. Обычно я использую Bundle и putParcelable() или ставлю Serializable(), но я знаю, что на самом деле это передача необработанных данных путем упаковки и распаковки объектов без сохранения ссылок.

Но теперь моя проблема в другом - мне нужно передать ссылку на некоторые службы и другие действия. Есть ли способ сделать это?


Может быть, я объясню свою проблему по реальной проблеме:

  1. У меня есть простой класс City, в котором помимо прочего хранятся данные о погоде.
  2. Я храню его в ListFragment и показываю там.
  3. У меня также есть фрагмент с GoogleMap, который показывает города в списке с погодой.

Как мне хранить cities: List<City> в моем приложении?


person Kamil Lelonek    schedule 19.02.2013    source источник


Ответы (3)


Поскольку рассматриваемый объект представляет собой простой список, вы можете расширить приложение и сохранить список в нем:

public class MyApp extends Application {

    List<City> cityList.....

    //onCreate()

    public List<City> getList() {}

    public List<City> setList()
}

Затем просто позвоните:

MyApp app = getApplication(); //getActivity().getApplication() in the Fragment
List<City> mylist = app.getList();
person Raghav Sood    schedule 19.02.2013

Мне нужно передать ссылку на некоторые услуги и другие действия

Нет, ты не. Вам необходимо разрешить «некоторым службам и другим действиям» доступ к одним и тем же данным. Передача по ссылке была бы одним из способов достижения этой цели, но этот подход обычно не используется в Android, как и в веб-приложениях (например, страницы не передают объекты JavaScript на другие страницы).

Типичный подход состоит в том, чтобы иметь центральную модель данных, такую ​​как синглтон, управляющий набором POJO, поддерживаемый базой данных. Затем вы передаете идентификаторы в Android, и эти идентификаторы обычно представляют собой простые значения (целые числа, строки и т. д.).

person CommonsWare    schedule 19.02.2013
comment
вы написали сообщение в блоге или загрузили код, демонстрирующий этот типичный подход? - person Jose_GD; 31.05.2013
comment
ваше сравнение очень плохое, потому что любой веб-фреймворк позволяет легко передавать ссылки между страницами через переменную сеанса (разные фреймворки по-разному, но всегда легко)... и я понимаю, что это не ваша вина, что у Android есть эта ужасная проблема с архитектурой (у меня есть никакого преимущества в отказе разработчику обмениваться ссылками между страницами, только недостатки, о которых все говорят...). и идея иметь синглтон и управлять всем из этого экземпляра решает проблему, но также и УБИВАЕТ ПРИНЦИП ОРИЕНТАЦИИ ОБЪЕКТА... так зачем использовать java? - person Rafael Lima; 23.05.2018
comment
@RafaelLima: поскольку любая веб-инфраструктура позволяет легко передавать ссылки между страницами через переменную сеанса - последний раз, когда я проверял, переменные сеанса не позволяют одной веб-странице передавать объект JavaScript на стороне клиента в пространство объектов JavaScript другой веб-страницы. Это то, что я имел в виду в своем ответе. На сервере любая веб-инфраструктура использует синглтоны повсюду (например, пул сеансов), хотя обычно с прицелом на то, чтобы скрыть синглтоны от отдельного разработчика. Я подозреваю, что в будущем вы увидите больше подобных шаблонов скрытия синглтона в Android. - person CommonsWare; 23.05.2018

Пожалуйста, посмотри:

Передать ссылку на объект в Intent без реализации Serializable или на запчасти

Вы не можете передать ссылку на объект через процесс. Как указывает Марк, вы можете сделать много вещей, которые будут функционально похожи. Хотя ответ на ваш вопрос - "нет"

person G. Blake Meike    schedule 19.02.2013