Использовать parcelable для хранения элемента как sharedpreferences?
У меня есть пара объектов, Location, в моем приложении, хранящемся в ArrayList, и используйте их для их перемещения между действиями. Код для объекта выглядит следующим образом:
public class Location implements Parcelable{
private double latitude, longitude;
private int sensors = 1;
private boolean day;
private int cloudiness;
/*
Måste ha samma ordning som writeToParcel för att kunna återskapa objektet.
*/
public Location(Parcel in){
this.latitude = in.readDouble();
this.longitude = in.readDouble();
this.sensors = in.readInt();
}
public Location(double latitude, double longitude){
super();
this.latitude = latitude;
this.longitude = longitude;
}
public void addSensors(){
sensors++;
}
public void addSensors(int i){
sensors = sensors + i;
}
+ Some getters and setters.
Теперь я нуждаюсь в хранении этих объектов более постоянно. Я где-то читал, что могу сериализовать объекты и сохранять как sharedPreferences. Должен ли я реализовывать сериализуемую версию, а также могу ли я сделать что-то подобное с конкретными?
Ответы
Ответ 1
Из документации по Посылка:
Посылка не является механизмом сериализации общего назначения. Этот класс (и соответствующий Parcelable API для размещения произвольных объектов в Parcel) разработан как высокопроизводительный транспорт IPC. Таким образом, нецелесообразно помещать какие-либо данные Parcel в постоянное хранилище: изменения в базовой реализации любой из данных в Посылке могут сделать старые данные нечитаемыми.
Ответ 2
Так как parcelable не помогает помещать ваши данные в постоянное хранилище (см. ответ StenSoft), вы можете использовать gson для сохранения своего местоположения вместо этого:
Сохранение местоположения:
String json = location == null ? null : new Gson().toJson(location);
sharedPreferences.edit().putString("location", json).apply();
Получение местоположения:
String json = sharedPreferences.getString("location", null);
return json == null ? null : new Gson().fromJson(json, Location.class);