Почему, когда я создаю экземпляр класса, расширяющего Activity и вызывающего метод, использующий openFileInput, я получаю исключение нулевого указателя? - PullRequest
0 голосов
/ 10 ноября 2011

Здравствуйте. Я пытаюсь вызвать метод (fileReader), который использует openFileInput (имя файла) из другого класса.Я делаю некоторую обработку в классе, который расширяет BroadcastReceiver, и мне нужно прочитать файл, я не могу вызвать openFileInput () внутри этого класса, поэтому я создал вспомогательный класс, который расширяет Activity или IntentService (пробовал оба) такчто я могу создать его экземпляр и вызвать его так:

    HelperClass hc = new HelperClass();
    hc.fileReader();

Я получаю исключение NullPointerException в строке в fileReader, где вызывается openFileInput.По моему мнению, это связано с тем, что контекст или конструктор не были должным образом инициализированы, это просто HelperClass () {super ();}.

Как я могу это преодолеть?

1 Ответ

4 голосов
/ 10 ноября 2011

Когда вы вызываете openFileInput, вы пытаетесь открыть файл, связанный с данным контекстом. Поскольку вы создаете экземпляр HelperClass без предоставления ему Context, он пытается открыть ваш файл, используя нулевой контекст (отсюда и исключение нулевого указателя). Что вы можете сделать, это заставить ваш метод fileReader() принять объект Context, а затем вызвать openFileInput с использованием контекста провайдера.

Ex.

public void fileReader(Context context) //change the return type if you need
{
  //your code
  //..

  FileInputStream fos = context.openFileInput(filename);
}

Чтобы назвать это

hc.fileReader(context); //get the context using "this" or getContext() depending on where you're calling it

Кроме того, вы можете сделать fileReader статическим методом, чтобы вам не нужно было создавать экземпляр HelperClass только для его использования.

public static void fileReader(Context context) //change the return type if you need
{
      //your code
      //..

      FileInputStream fos = context.openFileInput(filename);   
}

Затем позвоните, используя

HelperClass.fileReader(context);
...