[英]deserializing object with arraylist of booleans returning incorect boolean values
Iam目前正在為Android上的鬧鍾創建一個應用程序,而Ive遇到了一個問題,我希望有人可以澄清一下。 基本上,我序列化一些對象並保存到文件。 這些對象每個都包含boolean類型的arraylist。 代表警報響起的日子。 我認為可以很好地讀取和讀取序列化的“ alarm_entity”對象,但是我遇到一個問題。 一旦將“ alarm_entity”對象反序列化,則每個對象中的arraylist似乎會錯誤地返回某些索引處的布爾值。 一個示例是1.我將代表星期幾的天的狀態保存在復選框中。2.重新啟動設備。 然后打開應用程序,布爾值在GUI中的顯示不正確。 舉例來說,我有一個警報,並在相關復選框中將日期設置為“星期一”和“星期四”,重新啟動復選框后,我將其設置為“星期一”和“星期五”。 下面是我的“ alarm_entity”類,將其序列化。
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;
}
}
我試過在單元測試中測試此代碼,它似乎可以正常工作,並且布爾值反序列化與保存它們時相同。
以下是我用來編寫警報對象的方法
@Override
public synchronized void writeToFile(final ArrayList<alarm_entity> 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<alarm_entity> 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");
}
如果有人能為我照亮這點,那真是太好了,因為我現在有點迷失了。 我認為問題可能是由於序列化對象中的arraylist引起的。 無論如何,謝謝。
您的setDay(int pos, boolean state)
不正確。
您正在使用days.add(pos, state);
此方法在該位置插入數據。
要替換使用days.set(pos, state);
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.