Java Android-应用程序关闭后保存和加载对象时出现问题

Java Android-应用程序关闭后保存和加载对象时出现问题,java,android,save,Java,Android,Save,我正在尝试保存我的应用程序的游戏状态,以便在重新启动应用程序后可以重新加载。我试图保存的对象非常复杂,包含大量数据。我一直在寻找不同的解决方案,并尝试了很多 我得到的最接近的结果是应用程序能够在运行时保存和加载数据。 当关闭并重新启动应用程序时,它有时也会成功加载数据,但只是在非常罕见的时刻 有人知道问题出在哪里吗 我试图保存的对象看起来像以下我遗漏的不重要函数: public class SCSpieldaten implements Serializable { private

我正在尝试保存我的应用程序的游戏状态,以便在重新启动应用程序后可以重新加载。我试图保存的对象非常复杂,包含大量数据。我一直在寻找不同的解决方案,并尝试了很多

我得到的最接近的结果是应用程序能够在运行时保存和加载数据。 当关闭并重新启动应用程序时,它有时也会成功加载数据,但只是在非常罕见的时刻

有人知道问题出在哪里吗

我试图保存的对象看起来像以下我遗漏的不重要函数:

public class SCSpieldaten  implements Serializable {

    private static final long serialVersionUID = 1L;
    //Aktuelles Spiel
    /////////////////////////////////////////////////////////////////////////////////////////
    public static Random rand = new Random();
    public static int EinTabletBedienung        = 1;
    public static int KartePortLand             = 0;
    public static int AktuelleRunde             = 0;
    public static int AktiverSpieler            = 0;
    public static int AktivesDorf               = 0;
    public static int AktuellerBauplatz         = 1;
    public static int AktuellStaerksterMacht[]  = {KEINEANGABE,KEINEANGABE,KEINEANGABE};
    public static int SelektiertePositionX      = 0;
    public static int SelektiertePositionY      = 0;
    public static int AktuellesFeld             = 1;
    public static int AktuellesGebaeude         = 1;
    public static int AktuellesGebiet           = 0;
    public static int AktuelleAnzahlUnit[]      = {0,0,0};
    public static int AktuellerEinheitentyp[]   = {KEINEANGABE,KEINEANGABE,KEINEANGABE};
    public static int AktuellerBericht          = 0;
    public static ArrayList<Integer> SpinnerBerichtNr           = new ArrayList<Integer>();
    public static ArrayList<ArrayAdapter<String>> ArrayAdapter  = new ArrayList<ArrayAdapter<String>>();
    public static ArrayList<CBericht> CB_AktuellerBericht       = new ArrayList<CBericht>();
    public static CKosten AktuelleKosten                        = new CKosten(0,0,0,0,0);
    public static CGebaeude TempGebaeude                        = new CGebaeude();
    public static ArrayList<CSpieler> CS_Spieler                = new ArrayList<CSpieler>();
    public static ArrayList<CNeutralesLager> CN_NeutralesLager  = new ArrayList<CNeutralesLager>();
    public static ArrayList<CWegzoll> CW_Wegzoll                = new ArrayList<CWegzoll>();
    public static CDorf CD_Handelsstadt                         = new CDorf(GEBIETNEUTRAL);
    public static CDorf CD_Festung                              = new CDorf(GEBIETNEUTRAL);
    public static CDorf CD_Forschungszentrum                    = new CDorf(GEBIETNEUTRAL);
    public static CUnterstuetzung CU_FestungVerteidigung        = new CUnterstuetzung();
    public static CUnterstuetzung CU_FestungStartArmee          = new CUnterstuetzung();
    public static Integer[][] SpielerStatistic                  = new Integer[6][100];  


public void save(Context c) throws IOException
{
    FileOutputStream fos = c.openFileOutput("test0.txt", Context.MODE_WORLD_WRITEABLE);
    ObjectOutputStream os = new ObjectOutputStream(fos);
    os.writeObject(this);
    os.close();
}

public SCSpieldaten load(Context c) throws IOException, ClassNotFoundException
{
    FileInputStream fis = c.openFileInput("test0.txt");
    ObjectInputStream is = new ObjectInputStream(fis);
    SCSpieldaten simpleClass = (SCSpieldaten) is.readObject();
    is.close();
    return simpleClass;
}

为什么你不能用AsyncTask来做这个

实际上我刚在课堂上复习过这个。Android有一个内置的自动保存功能,可以在退出时保存您的数据。。。问题:您如何关闭/退出应用程序?我这样问是因为我相信如果您不使用sqlLIte存储过程,数据会存储在RAM中。。。如果是这样的话。。。退出应用程序的方式很重要,可能会删除您的数据。。。当用户失去焦点时,您可以尝试保存所有数据

if blah.lostfocus
yourData .store value
如前所述,在应用程序崩溃的情况下,您可能应该使用持久存储方法


查看此链接,向您展示如何使用大量静态变量!!!,想想RAM上的负载。我将通过任务管理器关闭它,因为应用程序崩溃后,数据也可以重新加载。这就是为什么你会丢失数据。您将需要一个持久存储方法。我还尝试了ObjectOutputStream。但我也有同样的问题。但这不应该是一种持久存储方法吗。。但您必须先写入文件,然后加载InputStream,我才能编辑我的问题。在那里你可以看到我做了什么。同样,它在运行时工作正常。但当我重新启动应用程序时,数据就消失了
if blah.lostfocus
yourData .store value