调用虚拟方法 null context.getSystemService
invoke virtual method null context.getSystemService
我的 logcat 中出现此错误,没有其他信息。
Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
在调试时我发现这部分产生了错误:
PendingIntent reply = intent.getParcelableExtra(PENDING_RESULT_EXTRA);
if (reply != null) {
if (requestType == 1) {
try {
if (! googInfo.equals("") || googReach) {
googReach = true;
}
if (! tradInfo.equals("") || tradReach) {
tradReach = true;
}
if (tradReach && googReach) {// && ! tooSlow) {
reply.send(RESULT_BOTH_AVAILABLE);
} else if (tradReach) {// && ! tooSlow) {
reply.send(RESULT_TRAD_AVAILABLE);
} else if (googReach) {// && ! tooSlow) {
reply.send(RESULT_GOOG_AVAILABLE);
} else {
reply.send(RESULT_UNAVAILABLE);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
} else {
try {
if (! googInfo.equals("") || ! tradInfo.equals("") || googReach || tradReach) {
reply.send(RESULT_AVAILABLE);
} else {
reply.send(RESULT_UNAVAILABLE);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
更准确地说,我执行以下操作的部分:
reply.send(RESULT_AVAILABLE);
这是一个由 Activity 启动的 IntentService。在调试时,我可以看到回复对象已正确填充,并且 RESULT_AVAILABLE 是一个静态最终整数,它也具有正确的值。
此 IntentService 使用以下代码调用:
PendingIntent pendingResult = createPendingResult(INTERNET_AVAILABILITY_CODE, new Intent(), 0);
Intent intent = new Intent(getApplicationContext(), PingIntentService.class);
intent.putExtra(PingIntentService.PENDING_RESULT_EXTRA, pendingResult);
startService(intent);
奇怪的是,我没有对代码的这些部分进行任何更改,而且它始终可以正常工作。另一件奇怪的事情是我的 try / catch 块没有捕获异常。我在该捕获中放置了断点和更多信息,以便我可以尝试获取有关该错误的更多信息,但该部分未被触发。
我已经用谷歌搜索了这个错误,很多人似乎在其他情况下也有这个问题。我知道我的上下文是空的,但是在调试时我可以看到它不是空的......即使我找到了所有链接/答案我仍然找不到问题的根源。
只是作为一个侧节点。
用这种 condition
:
编写代码 null safe
"".equals(tradInfo)
如果 tradInfo
为 null(也许这是一个有效的情况?),tradInfo.equals("")
你将得到一个 NullPointerException
。如果您切换它,则不会发生。
在继续寻找解决方案的过程中,感谢 CommonsWare,我偶然发现了答案。错误本身不在这部分:
reply.send(RESULT_AVAILABLE);
我正在搜索为什么我在 Java 堆栈跟踪中没有看到任何内容。我认为错误应该在上面代码中的 try / catch 块中被捕获,但是错误发生在 Activity 从 IntentService 返回结果时。
确实有一段代码我的Context对象还是Null。我将其更改为 getApplicationContext() 并已修复。这个错误以前从未发生过,因为它只发生在应用程序在设备中第一次启动时。它仍然是一开始添加的一段代码,我在其中存储我的应用程序上下文并传递它。第一次启动时,这个对象还没有被填充,就出现了这个错误。
我的 logcat 中出现此错误,没有其他信息。
Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
在调试时我发现这部分产生了错误:
PendingIntent reply = intent.getParcelableExtra(PENDING_RESULT_EXTRA);
if (reply != null) {
if (requestType == 1) {
try {
if (! googInfo.equals("") || googReach) {
googReach = true;
}
if (! tradInfo.equals("") || tradReach) {
tradReach = true;
}
if (tradReach && googReach) {// && ! tooSlow) {
reply.send(RESULT_BOTH_AVAILABLE);
} else if (tradReach) {// && ! tooSlow) {
reply.send(RESULT_TRAD_AVAILABLE);
} else if (googReach) {// && ! tooSlow) {
reply.send(RESULT_GOOG_AVAILABLE);
} else {
reply.send(RESULT_UNAVAILABLE);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
} else {
try {
if (! googInfo.equals("") || ! tradInfo.equals("") || googReach || tradReach) {
reply.send(RESULT_AVAILABLE);
} else {
reply.send(RESULT_UNAVAILABLE);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
更准确地说,我执行以下操作的部分:
reply.send(RESULT_AVAILABLE);
这是一个由 Activity 启动的 IntentService。在调试时,我可以看到回复对象已正确填充,并且 RESULT_AVAILABLE 是一个静态最终整数,它也具有正确的值。
此 IntentService 使用以下代码调用:
PendingIntent pendingResult = createPendingResult(INTERNET_AVAILABILITY_CODE, new Intent(), 0);
Intent intent = new Intent(getApplicationContext(), PingIntentService.class);
intent.putExtra(PingIntentService.PENDING_RESULT_EXTRA, pendingResult);
startService(intent);
奇怪的是,我没有对代码的这些部分进行任何更改,而且它始终可以正常工作。另一件奇怪的事情是我的 try / catch 块没有捕获异常。我在该捕获中放置了断点和更多信息,以便我可以尝试获取有关该错误的更多信息,但该部分未被触发。
我已经用谷歌搜索了这个错误,很多人似乎在其他情况下也有这个问题。我知道我的上下文是空的,但是在调试时我可以看到它不是空的......即使我找到了所有链接/答案我仍然找不到问题的根源。
只是作为一个侧节点。
用这种 condition
:
null safe
"".equals(tradInfo)
如果 tradInfo
为 null(也许这是一个有效的情况?),tradInfo.equals("")
你将得到一个 NullPointerException
。如果您切换它,则不会发生。
在继续寻找解决方案的过程中,感谢 CommonsWare,我偶然发现了答案。错误本身不在这部分:
reply.send(RESULT_AVAILABLE);
我正在搜索为什么我在 Java 堆栈跟踪中没有看到任何内容。我认为错误应该在上面代码中的 try / catch 块中被捕获,但是错误发生在 Activity 从 IntentService 返回结果时。
确实有一段代码我的Context对象还是Null。我将其更改为 getApplicationContext() 并已修复。这个错误以前从未发生过,因为它只发生在应用程序在设备中第一次启动时。它仍然是一开始添加的一段代码,我在其中存储我的应用程序上下文并传递它。第一次启动时,这个对象还没有被填充,就出现了这个错误。