我的logcat中出现此错误,没有其他信息。
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);
更准确地说,我执行以下操作的部分:
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);
这是一个由Activity启动的IntentService。在调试时我可以看到正确填写了回复对象,并且RESULT_AVAILABLE是一个静态的最终int,它也有正确的值。
使用以下代码调用此IntentService:
{{1}}
奇怪的是,我没有改变代码的这些部分,它总是正常工作。另一个奇怪的事情是我的try / catch块没有捕获异常。我已经在该捕获中添加了断点和更多信息,以便我可以尝试获取有关错误的更多信息,但不会触发该部分。
我已经用Google搜索了错误,许多人似乎在其他情况下遇到此问题。我理解我的上下文是空的,但是在调试时我可以看到它不是空的...即使我找到的所有链接/答案我仍然无法找到问题的根源。
答案 0 :(得分:1)
就像一个副节点。
使用此null safe
:
condition
"".equals(tradInfo)
使用tradInfo.equals("")
如果NullPointerException
为空,您将获得tradInfo
(也许这是一个有效的案例?)。如果你切换它不会发生。
答案 1 :(得分:0)
在继续寻找解决方案的同时,由于CommonsWare,我偶然发现了答案。错误本身并不属于这一部分:
reply.send(RESULT_AVAILABLE);
我在搜索为什么我在Java堆栈跟踪中看不到任何内容。我认为错误应该在上面的代码中的try / catch块中被捕获,但是当Activity从IntentService返回结果时发生了错误。
确实有一段代码我的Context对象仍然是Null。我将其更改为getApplicationContext()并修复了它。之前从未发生过此错误,因为它仅在应用程序第一次在设备中启动时发生。它仍然是一段代码,它在最初添加,我存储了我的应用程序上下文并传递了它。第一次启动时,此对象尚未填充,并发生此错误。