Parcel.readException pasando un objeto al servicio remoto
Escribí un servicio remoto que los clientes pueden iniciar sesión con los mecanismos habituales de IPC proporcionados por Android y el enlace parece funcionar. El problema surge cuando voy a llamar a un método en el que tengo que pasar un objeto como un parámetro porque recibo esta excepción "curiosa":
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 lanzado desde la clase de proxy generada desde el archivo .aidl.
- Android: ¿Cómo determinar si IntentService se está ejecutando?
- La mejor manera de actualizar un widget de Android cada 20-30 segundos: Handler, Service or Alarm?
- Servicio android onBind SecurityException
- ¿Cómo implementar mejor dos actividades que comparten un servicio (con conexión Bluetooth)?
- ¿Existe un equivalente GCM de Android para el servicio de comentarios de emisión Push de iOS?
Lo más extraño es que el objeto parece ser pasado correctamente, pero probablemente hay algo mal alrededor. ¿Alguna idea?
- Creación de un servicio de fondo en Android
- Cómo detener / iniciar un servicio que contiene un bucle infinito en la creación
- Hacer que la actividad se ejecute en segundo plano
- StopSelf no detiene mi servicio
- ¿Por qué noftificaciones aparecen en la barra de notificación de Android por un tiempo, entonces desaparece
- AlarmManager dentro de BroadcastReceiver cuando BOOT_COMPLETED
- No se invoca el método Java cuando se llama desde pthread nativo
- ¿Cómo puedo enlazar este servicio en Android?
He estado encontrando este problema también y después de un poco de empujar alrededor encontró el problema. Voy a publicar mi solución en caso de que ayude a otros encontrados a la deriva en el mismo barco.
En primer lugar, la depuración del subproceso remoto no funciona en Eclipse a menos que habilite 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 acaba de enlazar el servicio, una vez que el servicio está funcionando, abrir la ventana DDMS en eclipse y seleccionar el hilo remoto y presione el botón de depuración. Ahora es posible saltar de nuevo 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í me encontré con mi problema era en realidad estaba tratando de operar en un objeto puntero nulo en mi función stub en el proceso remoto que a su vez se inyecta una excepción de paquete para nullpointerexception en el resultado que estaba volviendo y se ve como lo que esta pregunta original está pidiendo acerca de.
Mi solución fue simplemente para probar el objeto no era nulo antes de usarlo 🙂
Es decir, he añadido la instrucción 'if' como se esperaría en la implementación de la función stub …
if( myobject != null ) { myobject.dosomething() }
- No funciona EditarTexto de relleno en la API 21
- La llamada requiere el nivel 11 de la API (el min actual es 8) android.app.Activity # onCreateView