Java getPackageManager()导致的空指针异常
因此,我正试图在的帮助下实现gcm或我的应用程序。但是,在尝试启动应用程序时,出现以下错误:Java getPackageManager()导致的空指针异常,java,android,android-studio,nullpointerexception,google-cloud-messaging,Java,Android,Android Studio,Nullpointerexception,Google Cloud Messaging,因此,我正试图在的帮助下实现gcm或我的应用程序。但是,在尝试启动应用程序时,出现以下错误: java.lang.RuntimeException: An error occured while executing doInBackground() Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.cont
java.lang.RuntimeException: An error occured while executing doInBackground()
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
以下是相关代码:
private static int getAppVersion(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
// should never happen
throw new RuntimeException("Could not get package name: " + e);
}
}
我犯了什么错
编辑:我使用“getAppVersion”的地方:
及
我从哪里开始getRegistrationId:
在onCreate方法中
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
}
} else {
Log.v(TAGD, "No valid GPS APK found.");
}
请显示您在何处以及如何调用
getAppVersion()
。好的,用包含getAppVersion的代码片段编辑了我的答案,实际上没有多大帮助。context
来自哪里?它可能是null
,或者尚未准备好使用(例如,您正在从活动或服务的数据成员初始值设定项调用它)。。。。现在显示您正在调用的storeRegistrationId
。在某个时刻传递空上下文-我注意到文档有点不完整-在他们的示例中,他们传递的是上下文
,但从未显示它是如何获得的。“上下文只是在类中定义为上下文上下文上下文”-您在哪里给它赋值?
private void storeRegistrationId(Context context, String regId) {
final SharedPreferences prefs = getGCMPreferences(context);
int appVersion = getAppVersion(context);
Log.i(TAGD, "Saving regId on app version " + appVersion);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(PROPERTY_REG_ID, regId);
editor.putInt(PROPERTY_APP_VERSION, appVersion);
editor.apply();
}
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
}
} else {
Log.v(TAGD, "No valid GPS APK found.");
}