2015-03-08 9 views
-1

Итак, я портирование мой IRC Bot работать на моем Tab, которая использует 4.4.2 (API 19)openFileOutput бросает NullPointerException (И я не знаю, почему)

Функция, которая дает мне проблемы для последнего день - это база данных Quote, которая добавляет кавычки пользователями и сохраняет их в файлах - их можно найти и отобразить. Теперь я уже кусаю зубы при создании файла. Метод заключается в следующем:

public void createFile(String filenick){ 

     try { 
      FileOutputStream os = MainActivity.context.openFileOutput(filenick, 0); 
      os.close(); 
     } catch (FileNotFoundException e) { 
      System.out.println("createFile "+filenick+" happened"); 
     } catch (IOException e) { 
      System.out.println("IO error " + filenick + " happened"); 
     } 


    } 

Контекст исходит из

public class MainActivity extends Activity { 

    public static Context context=new MainActivity().getApplication(); 

Он отлично компилируется и Android-студия Isnt дает мне какие-либо ошибки. Бот работает со всеми своими функциями, кроме этого.

java.lang.NullPointerException 
    at com.coilworks.dreaddroid.QDBClass.createFile(QDBClass.java:175) 
    at com.coilworks.dreaddroid.QDBClass.adder(QDBClass.java:57) 

Для контекста: QDBClass.java:175 является строка, начинающаяся с FileOutputStream.

57, на котором вызывается createFile.

Я до сих пор пробовал каждую возможную итерацию выходных потоков и писателей, которые хранятся в документации по Android.

Возможно, я просто искал неправильные условия?

ответ

1

Вы никогда не должны создавать экземпляр Activity напрямую. Это задача каркаса.

public static Context context=new MainActivity().getApplication();

Эта линия, вероятно, корень многих проблем, которые вы видите. context всегда будет null в этом случае.

+0

Я уверен, теперь чувствую себя глупо. Спасибо, теперь им охота, как правильно получить Контекст. – Scriver

0

Во-первых, никогда не создавайте экземпляр действия самостоятельно (например, new Activity()).

Во-вторых, не вызывайте методы в экземпляре действия до тех пор, пока эта активность не будет создана (то есть, по крайней мере, через реализацию onCreate() от Activity), если специально не указано иное.

Ваш context всегда будет null, учитывая ваш код выше.