(objectinputstream)ObjectInput.readObject()给了我一个空对象

时间:2012-06-04 07:38:47

标签: java android serializable objectoutputstream objectinputstream

我有这堂课:

public class SaveState implements Serializable {
    private static final long serialVersionUID = 1L;
    public List<String> downloadedMagazinesIds = new ArrayList<String>();//id's de revistas descargadas
    public List<String> downloadedMagazinesSummaries = new ArrayList<String>();//página sumario de cada magazine
    public List<FullMagazine> downloadedMagazines = new ArrayList<FullMagazine>();//todos los magazines bajados
    public Magazines ms=null; //Esta clase contiene el array de previews de revistas generado con el parser de XML
}

我使用这些方法将类(SaveState对象)存储在sdcard中,并再次将文件中的对象读入对象:

public static void saveData(){
    ObjectOutput out;
    try {
        //primero comprobamos si existe el directorio, y si no, lo creamos.
        File folder = new File(Environment.getExternalStorageDirectory() + "/C/");
        if(!folder.exists())
            folder.mkdirs();

        File outFile = new File(Environment.getExternalStorageDirectory(), "/C/appSaveState.data");
        out = new ObjectOutputStream(new FileOutputStream(outFile)); 
        out.writeObject(saveState);
        out.close();
    } catch (Exception e) {e.printStackTrace();}
}


public static void loadData(){
    ObjectInput in;
    try {
        File inFile = new File(Environment.getExternalStorageDirectory(), "/C/appSaveState.data");
        in = new ObjectInputStream(new FileInputStream(inFile));        
        saveState=(SaveState) in.readObject();
        in.close();
    } catch (Exception e) {e.printStackTrace();}
}

我存储了该对象,每次我的应用程序关闭时,每次打开我的应用程序时,我都会从SD卡中读取对象并且工作正常。当我创建一个较新版本的应用程序(1.01)时出现问题。当我启动应用程序并尝试从SD卡读取文件时,文件被读取但对象类的所有变量都是空的,它们实际上不是空的。

为什么我的代码无法正常运行?我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:1)

我试图编辑您的问题,使其更具可读性和易懂性。希望它能帮助你得到一些好的答案。

我建议如下

  1. 尝试使用相同的1.0版本阅读它。这将消除任何“版本”/清单相关问题。
  2. 您的FullMagazine可能是根本原因,删除该对象并再次尝试。
  3. 让我知道你发现了什么。这是一个有趣的问题。