簡體   English   中英

使用布爾數組列表反序列化對象並返回錯誤的布爾值

[英]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); 代替。

出文檔List.set(int,E)List.add(int,E)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM