Parcel.readException将对象传递给远程服务

我编写了一个远程服务,客户端可以使用Android提供的IPC常用机制登录,绑定似乎有效。 当我去调用一个必须将对象作为parameter passing的方法时会出现问题,因为我得到了这个“好奇”的exception:

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中不起作用,除非您在远程服务上启用调试。 要做到这一点,我需要运行应用程序并在我的第一个活动中设置一个断点,该活动只是绑定服务,一旦服务启动并运行我在eclipse中打开DDMS窗口并选择远程线程并按下调试按钮。 现在可以跳回到Java窗口并将断点添加到远程服务中并触发它们。

从那里我发现我的问题实际上是我试图在远程进程中的存根函数中对空指针对象进行操作,然后在返回的结果中为nullpointerexception注入了一个parcelexception,看起来就像这个原始问题所要求的那样关于。

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

即我在执行存根函数时添加了’if’语句,如你所期望的那样……

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