2010-10-19 10 views
10

Escribí un servicio remoto que los clientes pueden iniciar sesión con los mecanismos habituales de IPC proporcionados por Android y parece que el enlace funciona. El problema surge cuando voy a llamar a un método en el que tengo que pasar un objeto como parámetro, porque me sale este "curioso" excepción:Parcel.readException pasando un objeto al servicio remoto

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) 

Parece ser lanzada desde la clase de proxy generada a partir del. archivo de ayuda

Lo más extraño es que el objeto parece haberse pasado correctamente, pero probablemente haya algo mal. ¿Alguna idea?

+0

¿Pudo resolver esto? Estoy teniendo un problema similar. – folone

+3

Puede publicar el archivo aidl y el código para el –

+0

parcelable similar a esto: http://www.anddev.it/index.php?topic=1175.0 –

Respuesta

11

He estado encontrando este problema también y después de un poco de hurgar encontré el problema. Voy a publicar mi solución en caso de que ayude a otros a encontrar deriva en el mismo barco.

En primer lugar, la depuración del subproceso remoto no funciona en Eclipse a menos que active la depuración en el servicio remoto. Para hacer esto, necesitaba ejecutar la aplicación y poner un punto de interrupción en mi primera actividad que solo vincula el servicio, una vez que el servicio está funcionando, abro la ventana de DDMS en eclipse y selecciono el hilo remoto y presiono el botón de depuración. Ahora es posible volver a la ventana de Java y agregar sus puntos de interrupción en el servicio remoto y hacer que se activen.

A partir de ahí, encontré que mi problema era realmente tratar de operar un objeto puntero nulo en mi función de código auxiliar en el proceso remoto, que a su vez inyectó una excepción de parcela para nullpointereception en el resultado que devolvía y se parece a esto. la pregunta original está preguntando.

Mi solución era simplemente para probar el objeto no era nula antes de usarlo :)

es decir, añadí la sentencia 'if' como era de esperar en la implementación de la función de código auxiliar ...

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

Acabo de poner la invocación en un bloque try/catch solo para evitar modificar el código autogenerado :) – rciovati

Cuestiones relacionadas