10

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

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

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

4

1 回答 1

11

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

首先,除非您在远程服务上启用调试,否则在 Eclipse 中调试远程线程不起作用。为此,我需要运行应用程序并在我的第一个绑定服务的活动中放置一个断点,一旦服务启动并运行,我在 Eclipse 中打开 DDMS 窗口并选择远程线程并按下调试按钮。现在可以跳回 java 窗口并将断点添加到远程服务中并触发它们。

从那里我发现我的问题实际上是我试图在远程进程的存根函数中操作一个空指针对象,这反过来又在它返回的结果中为 nullpointerexception 注入了一个包裹异常,看起来就像这个原始问题在问什么关于。

我的解决方案只是在使用它之前测试对象不为空:)

即,我在存根函数的实现中添加了您所期望的“if”语句......

if( myobject != null )
{
   myobject.dosomething() 
}
于 2011-05-24T13:54:18.997 回答