2010-10-19 10 views
10

Ho scritto un servizio remoto che i client possono accedere con i normali meccanismi di IPC forniti da Android e il collegamento sembra funzionare. Il problema sorge quando vado a chiamare un metodo in cui devo passare un oggetto come parametro perché ricevo questa eccezione "curioso":Parcel.readException che passa un oggetto al servizio 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) 

Sembra essere gettato dalla classe proxy generato dal. file di aiuto.

La cosa più strana è che l'oggetto sembra essere passato correttamente ma probabilmente c'è qualcosa di sbagliato in giro. Qualche idea?

+0

Sei riuscito a risolvere questo? Sto avendo un problema simile. – folone

+3

Puoi pubblicare il file aidl e il codice per il parcellizzabile –

+0

simile a questo: http://www.anddev.it/index.php?topic=1175.0 –

risposta

11

Ho riscontrato anche questo problema e dopo un po 'di ricerca ho trovato il problema. Inserirò la mia soluzione nel caso in cui aiuti gli altri a trovarsi alla deriva nella stessa barca.

In primo luogo, il debug del thread remoto non funziona in Eclipse a meno che non si attivi il debug sul servizio remoto. Per fare ciò, avevo bisogno di eseguire l'app e inserire un punto di interruzione nella mia prima attività che legasse il servizio, una volta che il servizio è attivo e funzionante apro la finestra DDMS in eclissi e seleziono il thread remoto e premo il pulsante di debug. Ora è possibile tornare alla finestra java e aggiungere i punti di interruzione al servizio remoto e attivarli.

Da lì ho trovato il mio problema era in realtà stavo cercando di operare su un oggetto puntatore nullo nella mia funzione stub nel processo remoto che a sua volta ha iniettato un'eccezione parcel per nullpointerexception nel risultato che stava tornando e assomiglia a ciò la domanda originale è chiedere.

La mia soluzione era semplicemente quello di testare l'oggetto non era nulla prima di usarlo :)

cioè ho aggiunto il 'se' economico come ci si aspetterebbe per l'attuazione della funzione di stub ...

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

Ho appena messo l'invocazione in un blocco try/catch solo per evitare di modificare il codice generato automaticamente :) – rciovati

Problemi correlati