2015-01-04 2 views
0

Я буквально просмотрел stackoverflow, пытаясь найти правильный ответ ... может быть, я делаю что-то неправильно. Я делаю свое первое более сложное приложение, то есть приложение для викторины для детей. Я хочу, чтобы оценки сохранялись в файле highscorestable.txt, который позже будет открыт, обновлен, прочитан и т. Д. Файл должен существовать после закрытия приложения, чтобы повторно использовать его в следующей игре и так далее. Я использовал http://developer.android.com/guide/topics/data/data-storage.html. Я хочу сохранить файл в памяти телефона. У меня есть следующий код:Как сохранить (навсегда) файл в android и восстановить данные позже?

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_high_scores); 
     Intent intent = getIntent(); 
     String userData; 
     scores =(EditText)findViewById(R.id.scores); 

     if(intent.getStringExtra(EndScreen.EXTRA_MESSAGE)!=null) 
     { 
     userData = intent.getStringExtra(EndScreen.EXTRA_MESSAGE); 
     } 
     else 
     { 
     userData=""; 
     } 

     String temp = "";//to widzi przy zaladowaniu 
     String output = ""; 
     String g=""; 

     //FIRST READING not necessary? 
try{ 
      FileInputStream fin = openFileInput("highscorestable.txt"); 

      int c; 
      while((c = fin.read()) != -1){ 
       temp = temp + Character.toString((char)c); 
      } 
      fin.close(); 

     } 
    catch (Exception e) { 
      // e.printStackTrace(); 
    } 
     if(temp.equals(null)) 
     { 
      temp = ""; 
     } 

     //output = userData; //+ temp; 
     FileOutputStream fos;//WRITING 
     try { 
      fos = openFileOutput("highscorestable.txt", Context.MODE_PRIVATE); 
      fos.write(userData.getBytes()); 
      fos.close(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     //READING2 
     try{ 
      FileInputStream fin = openFileInput("highscorestable.txt"); 

      int c; 
      while((c = fin.read()) != -1){ 
       g = g + Character.toString((char)c); 
      } 
      fin.close(); 

      output= output+g; 
      scores.setText(output); 
     } 
     catch (Exception e) { 
     } 

Намерение сам работает, на самом деле все работает, однако fileitself не последний. Я имею в виду, когда я начинаю новую игру, старые данные не восстанавливаются. Как это исправить?

+0

Можете ли вы подтвердить предположение, запустив ваше приложение на эмуляторе, а затем исследуете хранилище с помощью браузера файлов DDMS? Создается ли файл и есть ли он во время запуска приложения во второй раз? Если это, вероятно, вы ошиблись в логике восстановления данных. – Egor

+0

OutputStream out = null; try { out = new BufferedOutputStream (новый FileOutputStream ("highscorestable.txt")); } catch (Exception e) { } Вы пробовали BufferedOutputStream, поскольку он позволяет добавлять существующий файл .i thinkn fileoutputstream записывает только данные, не добавляя их, поэтому ваши предыдущие данные не существуют. –

+0

Благодарим вас за ответы. Я попытаюсь с выходным потоком, как это делается здесь: http://stackoverflow.com/questions/5818406/append-data-in-existing-file-in-android-and-read-it. -> CHECKED, его тоже не работает. Джавад Зеб, что ты имеешь в виду? @Egor - DDMS - я должен посмотреть. – user3795517

ответ

0

попробуйте использовать sharedPrefrences: http://developer.android.com/training/basics/data-storage/shared-preferences.html

Они постоянно хранятся в приложении, как XML и только для чтения, чтобы приложение, если правильно настроен. (Если вы не НУЖНА текст, читайте здесь:. http://developer.android.com/training/basics/data-storage/files.htmlНе забудьте добавить разрешения на свой манифест)

EDIT: попробовать добавление в файл не писать

+0

Я изменил его на \t try { \t \t \t fos = openFileOutput ("highscorestable", Context.MODE_PRIVATE); \t \t \t //fos.write (userData.getBytes()); \t \t \t //fos.close(); \t \t \t OutputStreamWriter out = новый OutputStreamWriter (fos); \t out.append ("justSomeStringToCheck"); \t out.close(); – user3795517

+0

Совместно работали! Спасибо CyberGeek.exe !!! – user3795517

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