2

我已经有一段时间了,我刚刚发现是导致它的错误。我有一个 ArrayList,对于我想要保存的每个对象,我想要一个用于 AlarmManager 的待处理意图列表,这样如果我想从每个对象中删除多个警报,我所要做的就是访问列表的 PendingIntents 并简单地在 arraylist 中使用 alarmmanagername.cancel(PendingIntent) 。但是这些对象需要存储,并且在检索存储的对象时,arraylist 设置为 null,因为我必须将其设置为瞬态才能将对象数据存储并检索到系统中,而不会引发 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

据我了解,瞬态使它无法与其余数据一起保存,但是,我如何才能将这个不可序列化的对象与其余数据一起保存,以便在检索到它时,我可以访问这个数组列表没有它变成空?

如果没有,是否有更简单的方法可以稍后取消我想要保存的警报管理器?这是一个简单的应用程序,可让您保存多个警报,我只需要一种保存其未决意图的方法。

4

1 回答 1

0

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

  • APendingIntend仍然Parceable如此,因此您可以将其写入 a Bundle,例如,如果使用onSaveInstanceStateandonRestoreInstanceState

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

  • 您可以覆盖(或实现)java序列化方法writeObject(ObjectOutputStream out)readObject(ObjectInputStream in)添加您的瞬态字段,例如这个线程

于 2013-03-18T01:36:50.877 回答