Parcel.readException passaggio di un oggetto di servizio remoto
-
09-10-2019 - |
Domanda
ho scritto un servizio remoto che i clienti possono accedere con i consueti meccanismi di IPC forniti da Android e il legame sembra funzionare. Il problema sorge quando vado a chiamare un metodo in cui devo passare un oggetto come parametro perché ricevo questa eccezione "curioso":
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 .aidl.
La cosa più strana è che l'oggetto sembra essere passato in modo corretto, ma probabilmente c'è qualcosa di sbagliato in tutto. Qualche idea?
Soluzione
mi è stato incontrando questo problema come bene e dopo un po 'di rovistando trovato il problema. Ho intenzione di pubblicare la mia soluzione in caso aiuta altri hanno trovato alla deriva nella stessa barca.
In primo luogo il debug il thread remoto non funziona in Eclipse a meno che non attivare il debug sul servizio remoto. Per fare questo avevo bisogno per eseguire l'applicazione e mettere un punto di interruzione nella mia prima attività che appena si lega il servizio, una volta che il servizio è attivo e funzionante apro la finestra DDMS in Eclipse e selezionare il filo telecomando e premere il pulsante di debug. Ora è possibile tornare indietro alla finestra Java e aggiungere i punti di interruzione nel servizio remoto e li hanno attivati.
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 iniettato un'eccezione pacco per NullPointerException nel risultato tornava e si presenta come ciò che questo originale domanda sta chiedendo circa.
La mia soluzione era semplicemente quello di testare l'oggetto non era nulla prima di utilizzarlo:)
vale a dire. Ho aggiunto la dichiarazione 'se' come ci si aspetterebbe per l'attuazione della funzione di stub ...
if( myobject != null )
{
myobject.dosomething()
}