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

How to get better understanding of error in order to fix

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

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

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

始终传递您的方法在其中起作用的 activity 的上下文...

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

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

因为不能只编造不存在的静态字段 -

同时将 Context 类(类似于 ActivityContext)分配给 static 字段通常是不好的做法......应该避免,只要有可能。

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

private SharedPreferences sp;

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

sp = PreferenceManager.getDefaultSharedPreferences(context);

或者像已经在函数Activity本身中提到的"onCreate(...)":

sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

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

并避免从另一个 class.

移交由静态变量提供的上下文