繁体   English   中英

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

[英]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类(如ActivityContext )分配给static字段通常是一种不好的做法……并且应尽可能避免使用。

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

private SharedPreferences sp;

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

sp = PreferenceManager.getDefaultSharedPreferences(context);

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

sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM