2

私はこのクラスを持っています:

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 オブジェクト) を SD カードに保存し、ファイルからオブジェクトを再度オブジェクトに読み込みます。

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カードからファイルを読み取ろうとすると、ファイルは読み取られますが、オブジェクトクラスのすべての変数は空であり、実際には空ではありません.

コードが正しく動作しないのはなぜですか? 修正するにはどうすればよいですか?

4

1 に答える 1

1

私はあなたの質問をより読みやすく理解しやすいものにするために編集しようとしました。うまくいけば、それはあなたがいくつかの良い答えを得るのを助けるでしょう。

私は次のことを提案します

  1. 同じバージョン1.0を使用して読んでみてください。これにより、「バージョン」/マニフェスト関連の問題が排除されます。
  2. FullMagazineが根本的な原因である可能性があります。そのオブジェクトを削除して、再試行してください。

あなたが見つけたものを教えてください。興味深い質問です。

于 2012-06-04T09:00:37.717 に答える