我有一段时间的错误,因为我刚刚发现是造成它的。我有一个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吗?
如果没有,是否有更简单的方法可以在以后取消我想要保存的报警管理员?这是一个简单的应用程序,可以让您保存多个警报,我只需要一种方法来保存他们的待处理意图。
答案 0 :(得分:0)
它可以设计为与状态的其余部分一起保存,也可以不保存,所以我不确定你要对瞬态数据做什么。
PendingIntend
仍为Parceable
,因此您可以将其写入Bundle
,例如,如果使用onSaveInstanceState
和onRestoreInstanceState
瞬态数据可能被“计算”,即状态未直接保存,但您可以保存重新创建所需的数据(如果需要)。例如,数据库连接不可序列化,但您可以存储用户名,密码和JDBC URL。
您可以覆盖(或实施)java序列化方法writeObject(ObjectOutputStream out)
和readObject(ObjectInputStream in)
并添加您的瞬态字段,例如this thread