Делаю аудиоплеер, возник такой вопрос . Есть главное активити PlayerActivity из него мы переходим в AlbumsActivity , где у нас подгружается список альбомов , далее мы выбираем альбом через Intent передаем albumId и переходим в SongListActivity .
Тут нам нужно передать в PlayerActivity songId и ArrayList<HashMap<String, String>> songsList. В главное активити я это передаю. Только мне нужно как-то хранить это чтобы при следующем запуске приложения , подгружался список песен из альбома и songId.
Короче говоря в onCreate нужно подгрузить альбом и проиграть первый трек к примеру.
Уже советовали делать через SharedPreferences , только никак не получается сохранить в него ArrayList<HashMap<String, String>> songsList.
Сохранение данных между Activity
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Сохранение данных между Activity
Без проблем. Сериализация тебе в руки. Сохрани всю коллекцию во внутреннюю память. Думаю её вес маленький у тебя. Мы используем такой приём. Удобно до безобразия.
Записать
Считать (к примеру в onCreate)
Код правил для тебя в ручную, могут быть где-то синтактические ошибки. Но в целом считывание правильное.
Кстати сериализацию нередко используют для клонирования объектов, ибо обычное клонирование объектов бывает довольно сложной затеей, ибо порой требуется "глубокое колнирование". Сериализация решает эту проблему.
P.S. твои объекты должны имплементировать интерфейс Serializable
Записать
Код: Выделить всё
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) { }
}
}
Код: Выделить всё
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
