1

我在 LogCat 中收到以下错误消息:

   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

我知道 NullPointerException 是什么,但不是 100% 知道如何通过正确的上下文来解决这个问题。仅当应用程序在后台运行(多任务处理)时才会发生错误。非常感谢您提供一些指导。请使用 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)

推送接收器

UpdateData updateData = new UpdateData(MainActivity.mainActivity);

更新数据:

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

3 回答 3

1

最有可能(基于提供的有限示例,甚至没有指出代码在哪个上下文中运行),它应该是:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

因为一个人不能仅仅组成不存在的静态字段 -

虽然将Context类(类似ActivityContext)分配给static字段通常是不好的做法......并且应该尽可能避免。

于 2018-09-13T09:23:14.030 回答
1

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

private SharedPreferences sp;

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

sp = PreferenceManager.getDefaultSharedPreferences(context);

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

sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

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

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

于 2018-09-13T09:39:56.737 回答
0

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

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

始终传递您的方法工作的活动上下文...

于 2018-09-13T09:20:38.117 回答