openFileOutput создает исключение NullPointerException (и я не знаю почему)
Итак, я портирую своего IRC бота для запуска на моей вкладке, которая использует 4.4.2 (API 19)
Функция, которая доставляет мне проблемы в течение последнего дня, - это База данных котировок, которая добавляет цитаты пользователей и сохраняет их в файлах - их можно извлекать и отображать. Теперь я уже кусаю зубы, создавая файл. Метод заключается в следующем:
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 Studio не дает мне никаких ошибок. Бот работает со всеми своими функциями, кроме этого.
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.
До сих пор я пробовал каждую возможную итерацию Outputstreams и авторов, которую хранит документация для Android.
Maybe i just searched for the wrong terms?
2 ответа
Вы никогда не должны создавать Activity
непосредственно. Это работа фреймворка, чтобы сделать это.
public static Context context=new MainActivity().getApplication();
Эта линия, вероятно, является корнем многих проблем, с которыми вы сталкиваетесь. context
всегда будет null
в этом случае.
Во-первых, никогда не создавайте экземпляр действия самостоятельно (например, new Activity()
).
Во-вторых, не вызывайте методы в экземпляре операции, пока эта деятельность не будет создана (т.е., по крайней мере, через onCreate()
реализация от Activity
сам), если специально не сказано иначе.
Ваш context
всегда будет null
, учитывая ваш код выше.