2011-07-19 3 views
0

Я пытаюсь создать простое приложение для Android, которое сохраняет текст из формы EditText и сохраняет его во внутренней памяти. Кажется, что все работает нормально (появляется сообщение «Сохранено»), за исключением случаев, когда я завершаю действие и перезапускаю его, сохраненный текст из файла вообще не загружается. Я что-то упустил?Файл не сохранен в Android

public class ModifyInfo extends Activity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.edit); 

    Bundle extras = getIntent().getExtras(); 
    if(extras != null){ 
     int dayNum = extras.getInt("day"); 
     String dayName = ""; 

     switch(dayNum){ 
     case 1: 
      dayName = this.getString(R.string.dayMon); 
      break; 
     case 2: 
      dayName = this.getString(R.string.dayTue); 
      break; 
     case 3: 
      dayName = this.getString(R.string.dayWed); 
      break; 
     case 4: 
      dayName = this.getString(R.string.dayThu); 
      break; 
     case 5: 
      dayName = this.getString(R.string.dayFri); 
      break; 
     case 6: 
      dayName = this.getString(R.string.daySat); 
      break; 
     default: 
      dayName = this.getString(R.string.daySun); 
      break; 
     } 

     final TextView dayText = (TextView) findViewById(R.id.dayName); 
     final TextView editData = (TextView) findViewById(R.id.editData); 
     final Button save = (Button) findViewById(R.id.buttonSave); 
     final Button clear = (Button) findViewById(R.id.buttonClear); 
     final String Day = dayName; 

     dayText.setText(dayName); 

     clear.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       editData.setText(""); 
      } 
     }); 

     save.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String FILEOUTPUT = Day + ".txt"; 

       try { 
        String string = editData.getText().toString(); 

        FileOutputStream fos = openFileOutput(FILEOUTPUT, Context.MODE_PRIVATE); 
        fos.write(string.getBytes()); 
        fos.close(); 

        Toast.makeText(ModifyInfo.this, "Saved", Toast.LENGTH_SHORT).show(); 
       } catch (IOException e) { 
        Toast.makeText(ModifyInfo.this, "Save error", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     File FILEINPUT = new File(Day + ".txt"); 

     try { 
      BufferedReader bfr = new BufferedReader(new FileReader(FILEINPUT)); 
      String line; 

      while ((line = bfr.readLine()) != null) 
      { 
       editData.setText(line); 
      } 

      bfr.close(); 

     } catch (Exception e) { 
      editData.setText(""); 
     } 
    } 
} 

}

+0

Я бы улучшил обработку исключений. В общем, не очень хорошая привычка ловить экземпляр класса Exception. Вам следует лучше регистрировать исключения, чтобы вы знали, когда их бросают. – gregory561

ответ

0

Возможно, что андроид блокирует файлы из некоторых папок, и вы не можете их изменить. Вы можете использовать sharedpreferences или статические объекты.

+0

Должен ли я установить какое-то разрешение? –

+0

Я не мог установить его. Проверьте его из os, посмотрите свойства файла. –

+0

Использование SharedPreferences делает трюк. Большое спасибо! –

1

Вы можете читать \ п или такие пробелы из последней строки файла, так как вы вызываете editData.setText (линия); , который сбрасывает текст в текущую строку. Или вы также можете испытывать Исключение, в этом случае вы обрабатываете это Исключение, очищая editText.

Это должно быть, как это вместо:

try { 
     BufferedReader bfr = new BufferedReader(new FileReader(FILEINPUT)); 
     String line; 
     String fullText = ""; 

     while ((line = bfr.readLine()) != null) 
     { 
      fullText += line; 
     } 

     bfr.close(); 

     editData.setText(fullText); 

    } catch (Exception e) { 
     editData.setText(""); 
    } 

По вашему разъяснению, вы должны проверить, что вы открываете файл правильно, как указаны в: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Чтобы прочитать файл из внутренней памяти:

1. Call openFileInput() and pass it the name of the file to read. This returns a FileInputStream. 
2. Read bytes from the file with read(). 
3. Then close the stream with close(). 

Вместо этого вы пытаетесь открыть, используя BufferedReader.

+0

Он продолжает возвращать неиспользуемое исключение файла, что означает, что файл не хранится должным образом, если это вообще возможно. Что-то не так с моим save.setOnClickListener? –

+0

Я пересмотрел свой ответ. Не могли бы вы проверить с помощью openFileInput()? – faraday

+0

Большое спасибо за ваш ответ, но мне удалось исправить это с помощью SharedPreferences, что оказалось намного проще. Извините за беспокойство. –

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