Использовать 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);