2016-10-19 2 views
0

Ich bin Neuling in der Programmierung, und ich versuche, Objektlisten in eine Sicherungsdatei zu speichern, aber nichts scheint zu funktionieren. Ich bekomme keine Fehler oder irgendetwas anderes, aber Werte werden einfach nicht gespeichert (Zum Beispiel: Ich klicke auf "Geld" und verdiene Geld, es muss gespeichert werden, aber wenn ich App neu starte, ist "Geld" wieder 0) In Java meine Version arbeitet, jetzt bin Umwandlung ich meinen Code in android und es funktioniert gewohntAndroid Java - Objektlisten in Datei speichern

Meine Savefile Klasse:

public void SaveFile(){ 
     try{ 
      File SaveFile = new File("SaveFile.sav"); 
      if(!SaveFile.exists()) { 
       SaveFile.createNewFile(); 
      } 
      FileOutputStream saveFileSub = new FileOutputStream(SaveFile); 
      ObjectOutputStream save = new ObjectOutputStream(saveFileSub); 

      save.writeObject(CarMain.main); 
      save.writeObject(Box.boxes); 
      save.writeObject(CarFrame.frames); 
      save.writeObject(Part.parts); 
      save.writeObject(CarsLv1.cars); 
      save.writeObject(CarsLv2.cars); 
      save.writeObject(CarsLv3.cars); 
      save.writeObject(CarsLv4.cars); 
      save.writeObject(CarsLv5.cars); 
      save.writeObject(CarsLv6.cars); 
      save.writeObject(CarsLv7.cars); 
      save.writeObject(CarsLv8.cars); 
      save.writeObject(CarsLv9.cars); 
      save.writeObject(CarsLv10.cars); 
      save.writeObject(Statistic.statistic); 

      save.close(); 
     } 
     catch(Exception exc){ 
      exc.printStackTrace(); 
     } 
    } 

Meine Loadfile Klasse:

public void LoadFile(){ 
     try{ 
      File SaveFile = new File("SaveFile.sav"); 
      FileInputStream SaveFileSub = new FileInputStream(SaveFile); 
      ObjectInputStream load = new ObjectInputStream(SaveFileSub); 

      CarMain.main = (Integer[]) load.readObject(); 
      Box.boxes = (Integer[]) load.readObject(); 
      CarFrame.frames = (Integer[]) load.readObject(); 
      Part.parts = (Integer[]) load.readObject(); 
      CarsLv1.cars = (Integer[]) load.readObject(); 
      CarsLv2.cars = (Integer[]) load.readObject(); 
      CarsLv3.cars = (Integer[]) load.readObject(); 
      CarsLv4.cars = (Integer[]) load.readObject(); 
      CarsLv5.cars = (Integer[]) load.readObject(); 
      CarsLv6.cars = (Integer[]) load.readObject(); 
      CarsLv7.cars = (Integer[]) load.readObject(); 
      CarsLv8.cars = (Integer[]) load.readObject(); 
      CarsLv9.cars = (Integer[]) load.readObject(); 
      CarsLv10.cars = (Integer[]) load.readObject(); 
      Statistic.statistic = (Integer[]) load.readObject(); 
     load.close(); 
    } 
    catch(Exception exc){ 
     exc.printStackTrace(); 
    } 
} 

Und mein Spiel Loop in „OnCreate“ Klasse:

LoadFile(); 

GameLoop= new Thread() { 
    @Override 
    public void run() { 
     try { 
      int waited = 1; 

      while (waited > 0) { 
       sleep(100); 
       waited += 1; 
       SaveFile(); 
      } 
      SaveFile(); 
     } catch (InterruptedException e) { 
      // do nothing 
     } finally { 
      SaveFile(); 
     } 

    } 
}; 
GameLoop.start(); 

Antwort

0

ich bemerkt, dass Sie Integer-Arrays speichern, wenn Sie nicht eine Menge Daten haben, versuchen sharedPreference zu verwenden, um Daten zu speichern und erhalten

public void saveIntegerArray(Integer[] arr){ 
      if (mSharedPreferences!=null){ 
       mSharedPreferences.edit().putString(yourKey,Arrays.toString(arr)).apply(); 
      } 
     } 

     public Integer[] getIntegerArray(){ 
       if (mSharedPreferences!=null){ 
        String s = mSharedPreferences.getString(yourKey, null); 
        return getIntegers(s); 
       } else return null; 
      } 
    public static int[] getIntegers(String s) { 
     int[] result; 
     ArrayList<Integer> helper = new ArrayList<>(); 
     StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i < s.length(); i++) { 
      if (s.charAt(i) == ' '^i == s.length() - 1) { 
       if (i == s.length() - 1) { sb.append(s.charAt(i)); } 
       if (sb.toString().length() > 0) { 
        try { helper.add(Integer.parseInt(sb.toString())); 
        } catch(NumberFormatException nfe) { 
          // Ignore non-integers 
        } 
        sb.setLength(0); 
        continue; 
       } 
      } 
      sb.append(s.charAt(i)); 
     } 

     result = new int[helper.size()]; 
     int i = 0; 

     for (Integer n : helper) { 
      result[i++] = n; 
     } 
     return result; 
    } 
+0

Für echt ist es so schwer? Es sieht wie ein Kosmos aus. Warum kann ich keine einfachen Integer-Werte wie mein Beispiel speichern? In Java funktionierte meine Version, jetzt konvertiere ich meinen Code in Android und es wird nicht funktionieren. – crelix12345

+0

Ich habe gesehen, dass du mit deinen Infos bearbeitet hast. Ich habe meiner Meinung nach eine Menge Daten. – crelix12345

Verwandte Themen