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