java-保存arraylist< objecttype>:应用程序崩溃

wfveoks0  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(353)

我需要一个办法来拯救一个 ArrayList 物体的数量。我在网站上浏览过类似的问题,我(似乎;-)实现了我的发现,但我有两个问题:
如果我将类定义为 Serializable 把构造器放进去,启动时就崩溃了
否则,它不会保存数组
你能帮忙吗?我正在为一个志愿者的项目开发代码,我被困在。。。
事先非常感谢。
我的应用程序定义了以下类: 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…….
}
7cwmlq89

7cwmlq891#

如果要保存列表 RaccoltaPunti 必须是 Serializable .

9gm1akwq

9gm1akwq2#

问题似乎已解决(现在文件已成功保存,没有错误,并且通过手动打开,它似乎包含所有信息)。
谢谢大家。
我总结的解决方案,以利于任何其他未来的读者与同一问题。
这个问题通过让学生
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 同学们,我的实验表明,只要把它注解出来,一切都正常。我没有尝试所有可能的组合(即有或没有参数):我只是删除了它。
谢谢所有帮忙的人。

9rygscc1

9rygscc13#

尝试创建默认构造函数:

public Globals(){

}

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

相关问题