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

我写了一个远程服务,客户端可以使用Android提供的IPC的通常机制来login,绑定似乎工作。 当我去调用一个方法,我必须传递一个对象作为参数时,出现问题,因为我得到这个“好奇”的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文件生成的代理类抛出。

更奇怪的是,对象似乎正确地通过,但可能是周围有什么问题。 任何想法?

Solutions Collecting From Web of "Parcel.readException将对象传递给远程服务"

我也遇到过这个问题,经过一番摸索后发现问题。 我会发布我的解决scheme,以防止其他人在同一条船上漂stream。

首先,debugging远程线程在Eclipse中不起作用,除非您在远程服务上启用debugging。 要做到这一点,我需要运行应用程序,并在我的第一个活动,只是绑定服务的断点,一旦服务启动并运行,我打开eclipse中的DDMS窗口,并select远程线程,然后按debuggingbutton。 现在可以跳回到java窗口,并将您的断点添加到远程服务中,并将它们触发。

从那里我发现我的问题实际上是我试图在我的stub函数中的远程过程中的空指针对象进行操作,这反过来在返回的结果中注入一个parcel例外nullpointerexception,看起来像这个原始问题是问关于。

我的解决scheme是简单地testing对象是不是null之前使用它:)

即,我添加了“if”语句,就像您期望在存根函数的实现中那样…

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