2011-01-29 2 views
2

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

public void test(){ 

    String FILENAME = "hello_file"; 
    String string = "hello world!"; 

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

} 

Который всегда бросает NullPointerException, кто знает, что я пропускаю Может быть некоторое разрешение в AndroidManifest.xml?

ВОПРОС UPDATE:

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 

Выше линии trows NPE. Мой класс является абстрактным и его расширяющим Управлением, я не знаю, является ли это актуальным или нет.

Стек след:

01-29 22:30:44.575: ERROR/TEST(458): java.lang.NullPointerException 
01-29 22:30:44.575: ERROR/TEST(458): java.lang.RuntimeException: java.lang.NullPointerException 

кажется, что любая операция IO бросает NPE, я попытался это так:

try { 
      File myDir = new File(getFilesDir().getAbsolutePath()); 
      String s = ""; 

      FileWriter fw = new FileWriter(myDir + "/Test.txt"); 
      fw.write("Hello World"); 
      fw.close(); 

      BufferedReader br = new BufferedReader(new FileReader(myDir + "/Test.txt")); 
      s = br.readLine(); 

      // Set TextView text here using tv.setText(s); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

File myDir = new File(getFilesDir().getAbsolutePath()); 

Броски NPE, я даже добавил

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

в Androidmanifest.xml

Я сделал метод и передал в Context ctx, но мой ctx заканчивается нулевым, как я могу получить эту переменную? установить его на какое значение?

+0

Какая линия выбрасывает NPE? Вызов для .write()? или где-то еще? – jhouse

+0

На какой строке он бросает 'NullPointerException'? Другими словами, какой объект имеет значение null? – CommonsWare

+0

@James House @CommonsWare Я обновил вопрос – ant

ответ

1

Из обширного поискового запроса я обнаружил, что вам необходимо передать контекст вашему методу, который вы инициализируете в методе onCreateContext ctx = getApplicationContext();, и передаете его остальной части приложения, которое в ней нуждается.

0

Не забывайте о неявном «этом». Объект, созданный контекстом, на который вы вызываете тестовый метод, вероятно, имеет значение null.

- редактировать -

Либо это, либо вы звоните слишком рано жизненного цикла приложения. Я считаю, что вам нужно будет полностью инициализировать, прежде чем вы сможете это назвать - скорее всего, это будет в вашем методе onCreate.

+0

Я действительно не понимаю, что вы говорите, но у меня есть метод onCreate в моем приложении основного класса. Что я должен делать внутри? – ant

+0

@ c0mrade - когда вы называете свой тестовый метод? Активность происходит из контекста, поэтому вы можете напрямую вызвать openFileOutput, но вы должны дождаться, когда контекст будет полностью инициализирован до его вызова. Поэтому самый ранний вы можете вызвать свой тестовый метод в onCreate. Например, вы не могли бы войти в свой конструктор Activities, например. –

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