1

我需要一种方法来保存ArrayList对象。我已经浏览了该站点中的类似问题,并且我(似乎 ;-) 已经实现了我发现的内容,但是我遇到了两个问题:

  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
  • 如果要保存列表RaccoltaPunti必须Serializable
于 2012-08-24T12:13:42.527 回答
0

尝试创建一个默认构造函数:

public Globals(){

}

由于该类扩展了 Application 类,因此它将通过反射从外部调用,并且可能需要一个默认构造函数。默认情况下,如果您不编写任何构造函数,则默认构造函数已经存在。

使 RaccoltaPunti 也可序列化

于 2012-08-24T12:13:42.030 回答
0


问题似乎已解决(现在文件已成功保存且没有错误,并且通过手动打开它似乎包含所有信息)。
谢谢大家。

我总结了解决方案,以使未来有相同问题的任何其他读者受益。

根据以下代码片段,通过创建 class解决了该问题: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 回答