1

ArrayListオブジェクトを保存する方法が必要です。私はサイトで同様の問題を閲覧し、見つけたものを実装したようです (;-) が、2 つの問題が発生します。

  1. クラスを次のように定義しSerializableてコンストラクターを配置すると、起動時にクラッシュします
  2. それ以外の場合、配列は保存されません

助けていただけますか?ボランティアのプロジェクトのコードを開発していますが、行き詰まっています...

よろしくお願いします。

私のアプリケーションには、次のように定義されたクラスがあります: Globals(ファイル Globals.java)


public class Globals extends Application implements Serializable {  

    private int position=-1;
    private ArrayList<RaccoltaPunti> raccoltePuntiList = new ArrayList<RaccoltaPunti>();
    public static final long serialVersionUID = 1L;
    /** constructor - seem required by Serializable, but creating it crashes app */
    public Globals(int position, ArrayList<RaccoltaPunti> raccoltePuntiList) {
        this.position = position;
        this.raccoltePuntiList = raccoltePuntiList;
    }
     // {getters and setters…}

    public void saveData(){

        String filename = getResources().getString(R.string.GLB_filename);
        String fileWithPath = this.getFilesDir().getPath().toString()+"/"+filename;
        Toast.makeText(this, "Salvataggio testo..."+ fileWithPath, Toast.LENGTH_LONG).show();
        try {
            FileOutputStream fos = new FileOutputStream(fileWithPath);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(this.raccoltePuntiList);    
            oos.close();
            Toast.makeText(Globals.this, "DatiSalvati ", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Log.e("FileSave", "CDM - IOException", e);
            Toast.makeText(this, "Errore saving file", Toast.LENGTH_LONG).show();
        }
    }
}

参照されるクラスは次のとおりです: RaccoltaPunti.java

public class RaccoltaPunti {

    private String nomeRaccolta;
    private String nomePromoter;
    private String numeroTessera;
    private Long puntiPusseduti;
    private String dataScadenzaPunti;
    private String sitoWeb;
    private String sitoWebUsername;

        // constructor, getters and setters…….
}

4

3 に答える 3

2
  • リストを保存する場合はRaccoltaPuntiSerializable.
于 2012-08-24T12:13:42.527 に答える
0

デフォルトのコンストラクターを作成してみてください:

public Globals(){

}

このクラスは Application クラスを拡張しているため、リフレクションを介して外部から呼び出され、デフォルトのコンストラクターを期待する場合があります。デフォルトでは、コンストラクターを作成していない場合、デフォルトのコンストラクターは既に存在します。

RaccoltaPunti もシリアライズ可能にする

于 2012-08-24T12:13:42.030 に答える
0


問題は解決したようです (現在、ファイルはエラーなしで正常に保存され、手動で開くとすべての情報が含まれているようです)。
皆様ありがとうございました。

同じ問題を抱えている他の将来の読者のために、解決策を要約します。

この問題は、次のコード フラグメントに従ってクラスを作成することで解決されました。RaccoltaPunti Serializable

    import java.io.Serializable;
    ...

    public class RaccoltaPunti implements Serializable {
    ...

RaccoltaPuntiパラメーターを持つコンストラクターが既にあることに気付きました。

    public  RaccoltaPunti(
        String nomeRaccolta,
        String nomePromoter,
        String numeroTessera,
        Long puntiPusseduti,
        String dataScadenzaPunti,
        String sitoWeb,
        String sitoWebUsername) {



参考までに、ログに報告されたエラーは次のコード行を参照していました。

    oos.writeObject(this.raccoltePuntiList);    



クラスのコンストラクターに関して はGlobals、私の実験では、コメントアウトするだけですべてが機能することが示されました。考えられるすべての組み合わせを試したわけではありません (つまり、パラメーターの有無にかかわらず): 削除しただけです。

助けてくれたすべての人に感謝します。

于 2012-08-27T11:35:47.913 に答える