How can I save my arraylist of objects so they are restored when app restarts. I have tried to store it in bundle and restore it using savedinstancestate but everytime I restart the app, all data is gone and it starts from beginning(with empty list).
my code for Area class is
public class Area implements Parcelable {
// region Properties
public String id;
public String name;
public double latitude;
public double longitude;
public float radius;
// end region
// region Public
//creates a named area
public Area(String name, double latitude, double longitude, float radius){
this.id = UUID.randomUUID().toString();
this.name = name;
this.longitude= longitude;
this.latitude = latitude;
this.radius = radius;
}
// endregion
public Area(Parcel in){
id = in.readString();
latitude = in.readDouble();
longitude = in.readDouble();
name = in.readString();
radius = in.readFloat();
}
//getters
public String getId(){return id;}
public double getLatitude(){return latitude;}
public double getLongitude(){return longitude;}
public float getRadius(){return radius;}
public String getName(){return name;}
//setters
public void setName(String name){this.name = name;}
public void setLatitude(double latitude){this.latitude=latitude;}
public void setLongitude(double longitude){this.longitude=longitude;}
public void setRadius(float radius) {
this.radius = radius;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeDouble(latitude);
dest.writeDouble(longitude);
dest.writeString(name);
dest.writeFloat(radius);
}
public static final Parcelable.Creator<Area> CREATOR = new Parcelable.Creator<Area>()
{
public Area createFromParcel(Parcel in)
{
return new Area(in);
}
public Area[] newArray(int size)
{
return new Area[size];
}
};
@Override
public String toString(){return this.name + " " + this.radius;}
// endregion
}
Used this method for saving and restoring in bundle
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
// Here you can save your data
// If you want to store your ArrayList, it should implement Parselable
savedInstanceState.putParcelableArrayList("STORE_KEY", areas);
}
/**
* Restoring data
*/
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
areas = savedInstanceState.getParcelableArrayList("STORE_KEY");
}
}
Oncreate method is
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
areas = new ArrayList<Area>();
if(savedInstanceState != null){
areas = savedInstanceState.getParcelableArrayList("STORE_KEY");
}
if (areas.isEmpty()) {
Log.d("area list lala", "is empty");
}
else {
for (int i = 0; i < areas.size(); i++) {
Log.d("area list lala", areas.get(i).getName());
Log.d("area list lala", String.valueOf(areas.get(i).getRadius()));
}
}
There is also overrided onresume function
@Override
protected void onResume() {
super.onResume();
}