我编写了一个远程服务,客户端可以使用Android提供的IPC的常规机制登录,并且绑定(bind)似乎可以正常工作。当我去调用一个必须将对象作为参数传递的方法时,就会出现问题,因为我收到了这个“好奇”异常:

10-19 15:09:04.601: ERROR/AndroidRuntime(2985): FATAL EXCEPTION: main
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): java.lang.NullPointerException
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): at android.os.Parcel.readException(Parcel.java:1253)
10-19 15:09:04.601: ERROR/AndroidRuntime(2985):at android.os.Parcel.readException(Parcel.java:1235)
10-19 15:09:04.601: ERROR/AndroidRuntime(2985): at it.domod.commons.interfaces.DeviceManager$Stub$Proxy.sendCommand(DeviceManager.java:121)

它似乎是从.aidl文件生成的代理类中抛出的。

更奇怪的是,该对象似乎已正确传递,但周围可能有问题。任何想法?

最佳答案

我也一直遇到这个问题,经过一番摸索发现了问题。我将发布我的解决方案,以防其他人发现在同一条船上漂流。

首先,除非在远程服务上启用调试,否则在Eclipse中调试远程线程将无法进行。为此,我需要运行该应用程序并在我的第一个绑定(bind)服务的 Activity 中设置一个断点,一旦服务启动并运行,我在eclipse中打开DDMS窗口,然后选择远程线程并按debug按钮。现在可以跳回到Java窗口并将断点添加到远程服务中并触发它们。

从那里我发现我的问题实际上是我试图在远程进程中的 stub 函数中对空指针对象进行操作,该对象又向返回的结果中注入(inject)了nullpointerexception的包裹异常,看起来像是原始问题在询问什么关于。

我的解决方案只是在使用对象之前测试对象是否为null:

即我在 stub 函数的实现中如您所愿地添加了'if'语句...

if( myobject != null )
{
   myobject.dosomething()
}

10-06 13:07
查看更多