nikkorejz
@nikkorejz
Android developer

Почему возникает NullPointerException при работе с файлами?

Всем доброго времени суток!
Почему всплывает сообщение об ошибке такого вида
02-25 21:13:41.714 16207-16207/com.example E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException

При попытке инициализировать файл
File file = new File(getActivity().getFilesDir(), "myfile");

Изначально, у меня вызов класса отвечающего за сохранение объекта в файле, был прописан в методе фрагмента onPause(); и все было хорошо, ошибок не было, однако такой метод мне не подходил, ибо файл должен сохраняться по нажатию на элемент listview, а сам listview находится в другом фрагменте, и при попытке вызвать класс из другого фрагмента завершалось java.lang.NullPointerException

Я решил поступить по-другому, и добавить весь код в AsyncTask, но все равно, вылетает с той же ошибкой
Вот код:
public class onWriteFile extends AsyncTask<Void, Void, Void> {

        protected Void doInBackground(Void... params) {
            File file = new File(getActivity().getFilesDir(), "myfile");
            if (file.exists() == false) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Log.e("onWriteFile", "Файл не готов, создание нового файла для записи");
            }
            FileOutputStream f = null;
            try {
                f = new FileOutputStream(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            ObjectOutputStream s = null;
            try {
                s = new ObjectOutputStream(f);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                s.writeObject(array); //Я записываю List
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void voids) {
            super.onPostExecute(voids);
            Log.e("onWriteFile", "onPostExecute прошел");
        }
    }
  • Вопрос задан
  • 2678 просмотров
Пригласить эксперта
Ответы на вопрос 2
kivsiak
@kivsiak
software engineer
Ну вы поставьте брейкопоинт на строку со созданием фаила. Посмотрите что возращает getActivity()

Потом почитайте про жизненный цикл фрагмента, и когда ему аттачится активити. Или еще как то подумать почему getActivity() может null возвращать.
Ответ написан
Комментировать
xne71247
@xne71247
Я новичок. Попробуйте инициализацию файла заключить в try catch.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы