我有一个实现Serializable
的类,并且具有以下结构:
public class WorkWishesForm implements Serializable {
//================================================================================
// Переменные
//================================================================================
public ArrayList<OfferTrade> offerTradeArray;
public int salary;
public OperatingSchedule operatingSchedule;
public boolean businessTripsAllowed;
public ArrayList<Region> regionArray;
//================================================================================
// Конструктор
//================================================================================
public WorkWishesForm() {
}
}
类OperatingSchedule
也实现了Serializable,但在WorkWishesForm
类序列化后,由于某种原因,它的状态未被保存。这是它的结构:
public class OperatingSchedule extends NamedObject implements Serializable {
//================================================================================
// Конструктор
//================================================================================
public OperatingSchedule(JSONObject jsonObject, Context context) {
super(context);
try {
name = jsonObject.getString("name");
id = jsonObject.getInt("id");
}
catch (JSONException e) {
e.printStackTrace();
}
}
public OperatingSchedule() {
super();
}
//================================================================================
// Другое
//================================================================================
public String toString()
{
return this.name;
}
}
这是NamedObject:
public class NamedObject {
//================================================================================
// Переменные
//================================================================================
protected int id;
protected String name;
protected Context context; //Контекст часто бывает нужен для обращения к ресурсам, например, строкам
//================================================================================
// Конструкторы
//================================================================================
public NamedObject (Context context) {
this.context = context;
}
public NamedObject() {
}
//================================================================================
// Геттеры и сеттеры
//================================================================================
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//================================================================================
// Другое
//================================================================================
public static ArrayList<String> stringListFromObjectList (ArrayList<NamedObject> objectList)
{
ArrayList<String> stringList = new ArrayList<String>();
for (NamedObject obj : objectList) {
stringList.add(obj.getName());
}
return stringList;
}
}
如果我在Serializable
中实施NamedObject
,则类WorkWishesForm
将变为完全不可序列化(发生错误)。当我没有实现时,OperatingSchedule
的状态不会被保存。
我该怎么做才能保存?
答案 0 :(得分:0)
public class NamedObject implements Serializable {
transient protected Context context;
...
我做了三件事让它发挥作用:
Context
一个transient
字段。NamedObject
工具Serializable
。还有一件事:为实现serialVersionUID
的每个类添加了Serializable
。在Android Studio中使用了插件GenerateSerialVersionUID
。