deserializing object with arraylist of booleans returning incorect boolean values
我目前正在为 android 上的闹钟创建一个应用程序,我遇到了一个问题,我希望这里有人能澄清一下。基本上我序列化一些对象并保存到文件中。这些对象每个都包含一个布尔类型的数组列表。代表警报应该响起的日子。我似乎能够很好地读取和读取序列化的"alarm_entity"对象,但我有一个问题。一旦"alarm_entity"对象被反序列化,每个对象中的数组列表似乎会错误地返回某些索引处的布尔值。一个例子是 1. 我将天的状态保存在代表一周中的天的复选框中 2. 重新启动设备。然后打开应用程序,布尔值在 GUI 中的表示不正确。例如,我有一个闹钟,并在相关复选框中将日期设置为"星期一"和"星期四",重新启动复选框时,我将设置为"星期一"和"星期五"。下面是我的"alarm_entity"类,它被序列化了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | public class alarm_entity implements Serializable { private boolean state; private boolean repeating; private int hours; private int mins; private ArrayList<Boolean> days; private final int numdays = 7; public alarm_entity(int hoursin, int minsin) { days = new ArrayList<Boolean>(); state = true; repeating = false; hours = hoursin; mins = minsin; initDays(); } private void initDays() { for(int i = 0 ; i < numdays; i++) { boolean temp = false; days.add(i, temp); } } public void setDay(int pos, boolean state) { days.add(pos, state); } public ArrayList<Boolean> getDays() { return days; } public int getMins() { return mins; } public void setMins(int minsin) { mins = minsin; } public boolean isState() { return state; } public int getHours() { return hours; } public void setHours(int hoursin) { hours = hoursin; } public void setState(boolean statein) { state = statein; } public boolean getState() { return state; } } |
我已尝试在单元测试中测试此代码,它似乎工作正常,并且布尔值被反序列化,与保存时相同。
下面是我写报警对象的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | @Override public synchronized void writeToFile(final ArrayList alarmlist) { if(alarmfile == null) { createFile(Alarm_List.filename); } try { fostream = new FileOutputStream(alarmfile); oostream = new ObjectOutputStream(fostream); addAlarms(alarmlist); oostream.close(); fostream.close(); } catch(Exception ex) { ex.printStackTrace(); Log.e("error","write exception"); } } private void addAlarms(final ArrayList alarmlist) { Thread mythrd = new Thread(new Runnable() { @Override public void run() { for(alarm_entity alarm : alarmlist) { try { oostream.writeObject(alarm); } catch (IOException e) { e.printStackTrace(); } } } }); mythrd.start(); try { mythrd.join(); } catch (InterruptedException e) { e.printStackTrace(); } Log.d("alarms writing","alarms saved"); } |
如果有人能为我阐明这一点,那就太好了,因为我现在有点迷失了。我认为这个问题可能是由于序列化对象中的数组列表。无论如何提前谢谢。
您的
你正在使用
要替换使用
查看文档 List.set(int, E) 和 List.add(int, E)