如何使用Android保存对象的非序列化属性?

时间:2013-03-18 01:23:15

标签: android

我有一段时间的错误,因为我刚刚发现是造成它的。我有一个ArrayList,对于我想要保存的每个对象,我想要一个用于AlarmManager的待处理意图列表,这样如果我想从每个对象中删除多个警报,我所要做的就是访问列表PendingIntents,只需在arraylist中使用alarmmanagername.cancel(PendingIntent)。但是这些对象需要存储,并且在检索存储的对象时,arraylist被设置为null,因为我必须将其设置为transient以使对​​象数据存储并被检索到系统中而不抛出NotSerializableException。以下是该课程的设置方式:

public class ListObject implements Serializable{

    public String objectname, startampm, stopampm;  //name of schedule and am or pm
    private boolean[] Days = {
            false,  //monday
            false,  //tuesday
            false,  //and soforth
            false,
            false,
            false,
            false};

    private int starthour, startminute, stophour, stopminute;   //times from TimePicker
    public transient ArrayList<PendingIntent> pendintentlist = new ArrayList<PendingIntent>();; //ids for each of the alarms
    private int listalarmid;    //FOR WHEN COME BACK: maybe store pending intents instead of the array of ints above?
    private boolean vibrate, activated;
    private boolean nextday = false; //bool for if schedule goes into next day

根据我的理解,瞬态使其无法与其余数据一起保存,但是,如何将剩余数据保存为非序列化对象,以便在检索时,我可以访问这个arraylist而不会变为null吗?

如果没有,是否有更简单的方法可以在以后取消我想要保存的报警管理员?这是一个简单的应用程序,可以让您保存多个警报,我只需要一种方法来保存他们的待处理意图。

1 个答案:

答案 0 :(得分:0)

它可以设计为与状态的其余部分一起保存,也可以不保存,所以我不确定你要对瞬态数据做什么。

  • PendingIntend仍为Parceable,因此您可以将其写入Bundle,例如,如果使用onSaveInstanceStateonRestoreInstanceState

  • 瞬态数据可能被“计算”,即状态未直接保存,但您可以保存重新创建所需的数据(如果需要)。例如,数据库连接不可序列化,但您可以存储用户名,密码和JDBC URL。

  • 您可以覆盖(或实施)java序列化方法writeObject(ObjectOutputStream out)readObject(ObjectInputStream in)并添加您的瞬态字段,例如this thread