如何更好地理解错误以进行修复

时间:2018-09-13 09:15:40

标签: android pushy

我在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);

2 个答案:

答案 0 :(得分:1)

我认为问题是,您尝试在定义它的位置初始化 SharedPreferences sp 。 您应该先定义它,例如:

private SharedPreferences sp;

然后,在“ onReceive(Context context)”之类的函数中设置此全局变量 sp

sp = PreferenceManager.getDefaultSharedPreferences(context);

或者就像在Activity本身已经在函数“ onCreate(...)”中提到的那样:

sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

问题可能是,您尝试使用上下文(如活动)初始化变量,该变量目前尚不可用,但在生命周期的后续步骤中可用。

并避免移交给另一个类的静态变量提供的上下文。

答案 1 :(得分:0)

首先,您应该检查您的代码。您传递的是 MainActivity.mainAcitvity 而不是 MainACtivity.this getApplicationContext()

private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);

总是传递方法在其中起作用的活动的上下文...