2010-09-02 3 views
7

Это прекрасно описано here, как это сделать, единственная проблема: он не знает функции openFileOutput();Android: Как хранить данные во внутренней памяти?

private void saveSettingsFile() { 
      String FILENAME = "settings"; 
      String string = "hello world!"; 

      FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); //openFileOutput underlined red 
      try { 
      fos.write(string.getBytes()); 
      fos.close(); 
      } catch (IOException e) { 
      Log.e("Controller", e.getMessage() + e.getLocalizedMessage() + e.getCause()); 
      } 
} 

Те соответствующие пакеты я ввозимые:

import java.io.FileOutputStream; 
import java.io.IOException; 
import android.content.Context; 
+0

Можете ли вы разделить вывод ошибок LogCat? –

+0

Я только заметил, что «openFileOutput» подчеркнуто красным. Eclipse попросил меня создать так называемый метод в моем классе, который я случайно сделал. Теперь я удалил этот метод, и «openFileOutput» снова подчеркнуто красным. – OneWorld

+0

@ Константин: Это скорее логическая проблема, чем. Поэтому logcat еще не помогает. Правильно знаю, что я не могу его скомпилировать. – OneWorld

ответ

2

Посмотрите this example с использованием FileOutputStrem из примеров на dev.android.com. Это должно дать вам представление о том, как правильно использовать его.

+0

Спасибо u. Я буду смотреть в него. однако я все же предпочел бы, чтобы эти 5 строк работали. Я имею в виду, что автор документа, о котором я говорил выше, не может быть принципиально неправильным. – OneWorld

+4

вам нужно вызвать openFileOutput в контексте. Попробуйте 'context.openFileOutput()' – fredley

+0

Хорошо, хорошее предложение.Однако я не имею переменную или объект «контекст». Как мне создать или получить его? – OneWorld

1

Класс, в котором объявлен этот метод, определяется как «Статический». вот почему он бросает ошибку. Удалите статические данные из определения класса и бинго ...

0

Просто добавьте блок «try catch» и поместите их между ними.

Как это:.

private void saveSettingsFile(String FILENAME, String data) { 

    FileOutputStream fos; 
    try { 
     fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
     fos.write(data.getBytes()); 
     fos.close(); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } // openFileOutput underlined red 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Когда красная линия под линией .. Сначала проверьте, что линия находится под полной sentense или только правая стороны sentense (т.е. после знака равенства).

Если она охватывает всю линию, то она должна исправить некоторые ошибки ..

Или если он только под правой стороне sentense ... Тогда он должен хочет некоторые обработки исключений вещи.

Если вы не знаете, какое исключение он может генерировать ...
Не бойтесь, просто напишите весь код в блоке try (try {}), а затем добавьте catch и передайте объект Exception внутри поймать .. Теперь его хорошо ..

Как это:

try 
    { 
    ...........your code 
    ...... 
    } 
    catch(Exception e) 
    { 
    e.printstacktrace(); 

    } 

Теперь все в порядке.

Спасибо

0

openFileOutput это метод объекта Context. И не забудьте добавить предложение finally, чтобы закрыть поток. Bellow - пример (немного неуклюжий из-за Java 6 из-за Android).

String data = "Hello"; 
FileOutputStream fos = null; 
try { 
    fos = mContext.openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    fos.write(data.getBytes(Charset.defaultCharset())); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (fos != null) { 
     try { 
      fos.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

переменная mContext должна быть определена где-то выше и инициализируется как mContext = getApplicationContext(), если вы внутри деятельности

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