2016-10-19 4 views
0

Я новичок в программировании, и я пытаюсь сохранить списки объектов в файл сохранения, но ничего не работает. Я не получаю никаких ошибок или чего-то еще, но значения просто не будут сохраняться (например: я нажимаю кнопку «Деньги» и зарабатываю деньги, ее нужно сохранить, но когда я перезапущу приложение, «деньги» снова будут 0) В Java моя версия работала, теперь я преобразовать свой код в Android, и это не будет работатьAndroid Java - Сохранение списков объектов в файл

Мой SAVEFILE класс:

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(); 
     } 
    } 

Мой LoadFile класс:

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(); 
    } 
} 

И моя игра Loop в классе «OnCreate»:

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(); 

ответ

0

Я заметил, что вы спасаете целые массивы, если вы не имеете много данных, попробуйте использовать sharedPreference, чтобы сохранить и получить данные

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

Действительно ли это так сложно? Это похоже на космос .. Почему я не могу сохранить простые целочисленные значения, например, мой пример? В Java моя версия работала, теперь я конвертирую свой код в android, и он не будет работать. – crelix12345

+0

Я видел, что вы редактировали свою информацию. По-моему, у меня много данных. – crelix12345

Смежные вопросы