如何更好地理解错误以便修复
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.this 或 getApplicationContext()
private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
始终传递您的方法在其中起作用的 activity 的上下文...
最有可能(基于所提供的有限示例,该示例甚至没有指明代码在哪个上下文中运行),而是应该是:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
因为不能只编造不存在的静态字段 -
同时将 Context
类(类似于 Activity
或 Context
)分配给 static
字段通常是不好的做法......应该避免,只要有可能。
我假设问题是,您尝试在定义它的位置初始化 SharedPreferences sp。
你应该先定义它:
private SharedPreferences sp;
之后,在"onReceive(Context context)"这样的函数中设置这个全局变量sp:
sp = PreferenceManager.getDefaultSharedPreferences(context);
或者像已经在函数Activity本身中提到的"onCreate(...)":
sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
问题可能是,您尝试使用上下文(如 activity)初始化变量,此时不可用,但在生命周期的后续步骤中。
并避免从另一个 class.
移交由静态变量提供的上下文
我在 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.this 或 getApplicationContext()
private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
始终传递您的方法在其中起作用的 activity 的上下文...
最有可能(基于所提供的有限示例,该示例甚至没有指明代码在哪个上下文中运行),而是应该是:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
因为不能只编造不存在的静态字段 -
同时将 Context
类(类似于 Activity
或 Context
)分配给 static
字段通常是不好的做法......应该避免,只要有可能。
我假设问题是,您尝试在定义它的位置初始化 SharedPreferences sp。 你应该先定义它:
private SharedPreferences sp;
之后,在"onReceive(Context context)"这样的函数中设置这个全局变量sp:
sp = PreferenceManager.getDefaultSharedPreferences(context);
或者像已经在函数Activity本身中提到的"onCreate(...)":
sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
问题可能是,您尝试使用上下文(如 activity)初始化变量,此时不可用,但在生命周期的后续步骤中。
并避免从另一个 class.
移交由静态变量提供的上下文