如何保存对象的数组列表,以便在应用程序重新启动时恢复它们。我尝试将其存储在 bundle 中并使用保存的实例状态恢复它,但每次重新启动应用程序时,所有数据都会消失并且从头开始(带有空列表)。
我的区域类代码是
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
}
使用此方法在包中保存和恢复
@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方法是
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()));
}
}
还有重写的 onresume 函数
@Override
protected void onResume() {
super.onResume();
}
最佳答案
如何将对象存储在专为存储对象而设计的 SQLite 数据库或 db4o ( more about it ) 中。
This is关于将对象序列化为字节流的文章。
关于java - 保存对象的数组列表,以便在应用程序重新启动时恢复它们。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710076/