调用虚方法null context.getSystemService

时间:2016-05-20 13:15:02

标签: java android android-context intentservice

我的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搜索了错误,许多人似乎在其他情况下遇到此问题。我理解我的上下文是空的,但是在调试时我可以看到它不是空的...即使我找到的所有链接/答案我仍然无法找到问题的根源。

2 个答案:

答案 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()并修复了它。之前从未发生过此错误,因为它仅在应用程序第一次在设备中启动时发生。它仍然是一段代码,它在最初添加,我存储了我的应用程序上下文并传递了它。第一次启动时,此对象尚未填充,并发生此错误。