2013-02-18 1 views
0

Я ищу, чтобы сохранить/загрузить очень простое приложение в Android. Мысль будет проверять, существует ли файл в методе onCreate(), и если он загружает настройки в onCreate. Является ли это правильной функцией для этого? Сохранение выполняется в функции onPause().Android Beginner Сохранить/Загрузить небольшую информацию

То, как я буду это делать, - через FileOutputStream и FileInputStream.

Но как выглядит мой код? В настоящее время у меня есть это:

if (new File(FILENAME).isFile()) { 
     FileInputStream fis = null; 
     try { 
      fis = openFileInput(FILENAME); 
      fis.read(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     numOfEpisode = Integer.parseInt(fis.toString()); 
     numOfSeason = Integer.parseInt(fis.toString()); 
    } 

Игнорируйте тот факт, что я не обработал исключение все же, так как я знаю, что файл будет там при тестировании.

protected void onPause() { 
    try { 
     FileOutputStream fos = openFileOutput(FILENAME, 
       Context.MODE_PRIVATE); 
     fos.write(numOfEpisode); 
     fos.write(numOfSeason); 
     fos.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Приложение в настоящее время дает мне сообщение об ошибке при закрытии приложения (когда вызывается onPause()). Может ли кто-нибудь указать мне в любом направлении, почему?

Также как узнать, каким образом FileOutputStream.write() записывает мои заявления? Является ли это FIFO или LIFO?

+3

Есть ли причина, по которой вы используете файлы для этого? Если вы только сохраняете 2 'int', я бы просто сохранил их в [SharedPreferences] (http://developer.android.com/reference/android/content/SharedPreferences.html) –

ответ

2

Я хотел бы использовать SharedPreferences для этого, поскольку это гораздо легче сделать, и специально предназначена для хранения и извлечения небольших количеств информации из устройства. Посмотрите, как это делается. How to use SharedPreferences in Android to store, fetch and edit values.

Вы должны прочитать значения в onCreate и сохранить их. Когда вы onPause, вы должны записать их в SharedPreferences.

+0

'SharedPreferences prefs = getPreferences (MODE_PRIVATE) ; \t \t numOfEpisode = prefs.getInt ("numOfEpisode", 0); \t \t numOfSeason = prefs.getInt ("numOfSeason", 0); ' Для чтения ' SharedPreferences.Editor editor = getPreferences (MODE_PRIVATE) .edit(); \t \t editor.putInt ("numOfEpisode", numOfEpisode); \t \t editor.putInt ("numOfSeason", numOfSeason); \t \t editor.commit(); ' Для записи. Функция работает (она читает и записывает), однако ошибка сохраняется, когда я закрываю приложение. –

+0

Вам нужно вызвать super.onPause(), например. 'protected void onPause() {super.onPause(); // вставляем все остальное здесь //} ' – Dororo

+0

Конечно! Не могу поверить, что я пропустил это. Большое спасибо. Работаю сейчас –

0

Попробуйте с этим кодом:

File Gdir = new File(Environment.getExternalStorageDirectory() 
        .getPath() + "/NewFolder/"); 
      // have the object build the directory structure, if needed. 

      if (!Gdir.exists()) { 
       Gdir.mkdirs(); 
      } 
       File outputFile = new File(Gdir, "file.txt"); 
       // now attach the OutputStream to the file object, instead of a 
       // String representation 
       try {     
        FileWriter mod = new FileWriter(
          outputFile); 
        mod.write(numOfEpisode); 
        mod.write(numOfSeason); 
        mod.flush(); 
        mod.close(); 

       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       Toast.makeText(getApplicationContext(), "File saved in: "+outputFile, Toast.LENGTH_LONG).show();