Как лучше понять ошибку, чтобы исправить
Я получаю следующее сообщение об ошибке в LogCat:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
Я знаю, что такое исключение NullPointerException, но не на 100% о том, как это исправить в отношении передачи правильного контекста. Ошибка возникает только в том случае, когда приложение работает в фоновом режиме (многозадачность). Пожалуйста, LogCat и оскорбительный код ниже. Спасибо
Logcat:
Process: com.app.app, PID: 17519
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:537)
at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
at com.app.app.DatabaseHandling.UpdateData.<init>(UpdateData.java:70)
at com.app.app.PushService.PushReceiver$1.run(PushReceiver.java:94)
at java.lang.Thread.run(Thread.java:764)
PushReceiver
UpdateData updateData = new UpdateData(MainActivity.mainActivity);
UpdateData:
private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
3 ответа
Я предполагаю, что проблема заключается в том, что вы пытаетесь инициализировать sp SharedPreferences в том месте, где вы его определяете. Вы должны определить это сначала как:
private SharedPreferences sp;
После этого установите эту глобальную переменную sp в функции, подобной "onReceive(Context context)":
sp = PreferenceManager.getDefaultSharedPreferences(context);
Или, как уже упоминалось в самой Activity в функции "onCreate(...)":
sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
Проблема может заключаться в том, что вы пытаетесь инициализировать переменную с контекстом (например, действием), который недоступен в данный момент, но на более позднем этапе жизненного цикла.
И избегайте передачи контекста, предоставленного статической переменной из другого класса.
Скорее всего (на основе предоставленного ограниченного примера, который даже не указывает, в каком контексте выполняется этот код), это должно быть:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
потому что нельзя просто создать статические поля, которые не существуют -
при назначении Context
классы (так Activity
или же Context
) чтобы static
Поля вообще плохая практика... и их следует избегать, когда только возможно.
Сначала вы должны проверить свой код. вы передаете MainActivity.mainAcitvity вместо MainACtivity.this или getApplicationContext()
private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
всегда передавайте контекст активности, в которой работает ваш метод...