[英]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$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);
最有可能(基于提供的有限示例,甚至没有指出代码在哪个上下文中运行),它应该是:
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);
问题可能在于,您尝试使用上下文(如活动)初始化变量,该变量目前尚不可用,但在生命周期的后续步骤中不可用。
并避免移交给另一个类的静态变量提供的上下文。
首先,您应该检查您的代码。 您正在传递MainActivity.mainAcitvity而不是MainACtivity.this或getApplicationContext()
private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
总是传递您的方法在其中起作用的活动的上下文...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.