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文件生成的代理类抛出。

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

  • Parcel.readStringArray()的参数是什么?
  • 为什么可以将一个布尔数组写入一个parcel而不是一个布尔值?
  • 如何做一个内部类Parcelable
  • 无法在Intent中传递自定义对象:方法Put Extra对于Intenttypes是不明确的
  • Android在SQLite中存储一个Parcelable对象
  • 读取整数数组并将其写入parcel
  • 在已签名的应用程序中为包裹写入例外
  • 具有ArrayList的Android类Parcelable
  • 我也遇到过这个问题,经过一番摸索后发现问题。 我会发布我的解决scheme,以防止其他人在同一条船上漂stream。

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

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

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

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

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