2013-11-02 3 views
3

Я не могу понять, почему сериализация сохраняет и восстанавливает список объектов, но не их состояние. Отображается список, но не заголовок, который содержится в объекте. Класс объекта реализует Serializable.Сериализация ArrayList, содержащей несколько объектов, не сохраняет состояние объекта

Сериализация объектов ("с"):

arrayList.add (c); 
    String fileName = "testFile"; 

    try { 
     FileOutputStream fos = this.openFileOutput (fileName, Context.MODE_PRIVATE); 
     ObjectOutputStream os = new ObjectOutputStream (fos); 
     os.writeObject (arrayList); 
     fos.close(); 
     os.close(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

Десериализация:

FileInputStream fis = this.openFileInput (fileName); 
     ObjectInputStream ois = new ObjectInputStream (fis); 
     arrayList = (ArrayList<TestObject>) ois.readObject(); 
     ois.close(); 
     return arrayList; 

Добавление объектов к адаптеру:

for (TestObject c : arrayList) { 
     adapter.add (c); 
    } 

Edit: часть класса TestObject:

public class TestObject implements Serializable { 

private String mName; 

@Override 
public String toString() { 
    return mName; 
} 

public String getName() { 
    return mName; 
} 

public void setName (String name) { 
    mName = name; 
} 
+0

вы пишете ArrayList строки и читать ArrayList из TestObjcet? – Blackbelt

+0

Я не следую. Почему ArrayList будет иметь тип String? – abc32112

+0

Сериализация объектов («c»). В любом случае, что означает «их состояние»? – Blackbelt

ответ

0

да, он также работает для меня проверка

public class SerializationIssue { 
private static final String fileName = "testFile"; 

public static void main(String[] args) { 
    TestObject object1= new TestObject(); 
    TestObject object2=new TestObject(); 
    object1.setName("object1"); 
    object2.setName("object2"); 

    List<TestObject> list=new ArrayList<TestObject>(); 
    list.add(object1); 
    list.add(object2); 

    serializeList(list); 
    ArrayList<TestObject> deserializedList=desializeDemo(); 
    System.out.println(deserializedList.get(0).getName()); 

} 

private static ArrayList desializeDemo() { 
    ArrayList<TestObject> deserializedList; 
    try 
     { 
     FileInputStream fileIn = new FileInputStream(fileName); 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     deserializedList= (ArrayList<TestObject>) in.readObject(); 
     in.close(); 
     fileIn.close(); 
     }catch(IOException i) 
     { 
     i.printStackTrace(); 
     return null; 
     }catch(ClassNotFoundException c) 
     { 
     System.out.println("Employee class not found"); 
     c.printStackTrace(); 
     return null; 
     } 
    return deserializedList; 
} 

private static void serializeList(List<TestObject> list) { 
    // TODO Auto-generated method stub 

     try { 
      FileOutputStream fos = new FileOutputStream(fileName); 
      ObjectOutputStream os = new ObjectOutputStream (fos); 
      os.writeObject (list); 
      fos.close(); 
      os.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

} 
} 

TestObject боб

public class TestObject implements Serializable{ 

    /** 
    * serial version. 
    */ 
    private static final long serialVersionUID = 1L; 
    String name; 
    public TestObject(String name) { 
     super(); 
     this.name = name; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

} 

Выход: object1

Смежные вопросы