如何使用非基本对象创建Java类,在序列化时保存这些对象的状态

时间:2014-10-16 12:17:00

标签: java serializable

我有一个实现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的状态不会被保存。

我该怎么做才能保存?

1 个答案:

答案 0 :(得分:0)

public class NamedObject implements Serializable {
       transient protected Context context; 
       ...

我做了三件事让它发挥作用:

  1. 制作Context一个transient字段。
  2. 制作NamedObject工具Serializable
  3. 修复了我的代码中的错误,我在其中将OperatingSchedule设置为表单。这个错误不涉及序列化问题,这是我在代码的另一部分中的个人错误。实际上,当我做前两件事时,它开始保存状态,我只是没有正确使用它。
  4. 还有一件事:为实现serialVersionUID的每个类添加了Serializable。在Android Studio中使用了插件GenerateSerialVersionUID