Сохранение данных между Activity

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
DevSergio
Сообщения: 37
Зарегистрирован: 22 янв 2013, 19:51
Откуда: Kharkov

Сохранение данных между Activity

Сообщение DevSergio » 04 апр 2013, 22:43

Делаю аудиоплеер, возник такой вопрос . Есть главное активити PlayerActivity из него мы переходим в AlbumsActivity , где у нас подгружается список альбомов , далее мы выбираем альбом через Intent передаем albumId и переходим в SongListActivity .
Тут нам нужно передать в PlayerActivity songId и ArrayList<HashMap<String, String>> songsList. В главное активити я это передаю. Только мне нужно как-то хранить это чтобы при следующем запуске приложения , подгружался список песен из альбома и songId.
Короче говоря в onCreate нужно подгрузить альбом и проиграть первый трек к примеру.
Уже советовали делать через SharedPreferences , только никак не получается сохранить в него ArrayList<HashMap<String, String>> songsList.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Сохранение данных между Activity

Сообщение Mikhail_dev » 05 апр 2013, 12:09

Без проблем. Сериализация тебе в руки. Сохрани всю коллекцию во внутреннюю память. Думаю её вес маленький у тебя. Мы используем такой приём. Удобно до безобразия.
Записать

Код: Выделить всё

void writeData() { 
  FileOutputStream fos=null;
  ObjectOutputStream oos=null;
  try {
    fos = new FileOutputStream("mySongsList");
    oos = new ObjectOutputStream(fos);
    oos.writeObject(songsList);
    oos.flush();
  } catch (Exception e) {
    e.printstacktrace(); 
  } finally { 
    try {
    if (fos!=null) fos.close();
    if (oos!=null) oos.close();
  } catch (Exception e) { }
  }
}
Считать (к примеру в onCreate)

Код: Выделить всё

private void readData() {
  ArrayList<HashMap<String, String>> songsList = null;
  FileInputStream fis=null;
  ObjectInputStream ois=null;
  try { 
    fis = new FileInputStream("mySongsList");
    ois = new ObjectInputStream(fis);
    songsList = (ArrayList<HashMap<String, String>>) ois.readObject();
  } catch (Exception e) {
    e.printstacktrace(); 
  } finally { 
    try {
      if (fis!=null) fis.close();
      if (ois!=null) ois.close();
    } catch (Exception e) { }
  }
}
Код правил для тебя в ручную, могут быть где-то синтактические ошибки. Но в целом считывание правильное.
Кстати сериализацию нередко используют для клонирования объектов, ибо обычное клонирование объектов бывает довольно сложной затеей, ибо порой требуется "глубокое колнирование". Сериализация решает эту проблему.
P.S. твои объекты должны имплементировать интерфейс Serializable

DevSergio
Сообщения: 37
Зарегистрирован: 22 янв 2013, 19:51
Откуда: Kharkov

Re: Сохранение данных между Activity

Сообщение DevSergio » 05 апр 2013, 15:20

спасибо , помогло =)

Ответить