Parcel.readException передача объекта в удаленный сервис - PullRequest
10 голосов
/ 19 октября 2010

Я написал удаленный сервис, чтобы клиенты могли входить в систему с помощью обычных механизмов IPC, предоставляемых Android, и привязка, похоже, работает.Проблема возникает, когда я вызываю метод, в котором мне нужно передать объект в качестве параметра, потому что я получаю это «любопытное» исключение:

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.

Более странно то, что объект, кажется, передан правильно, но, возможно, что-то не так.Есть идеи?

1 Ответ

11 голосов
/ 24 мая 2011

Я тоже сталкивался с этой проблемой и после небольшого возни нашел проблему.Я опубликую свое решение на тот случай, если оно поможет другим найти дрейф в одной лодке.

Во-первых, отладка удаленного потока не работает в Eclipse, если вы не включите отладку в удаленном сервисе.Чтобы сделать это, мне нужно было запустить приложение и поставить точку останова в моем первом действии, которое просто связывает службу, когда служба запущена и запущена, я открываю окно DDMS в eclipse, выбираю удаленный поток и нажимаю кнопку отладки.Теперь можно вернуться к окну Java и добавить точки останова в удаленный сервис, чтобы они сработали.

Оттуда я обнаружил, что моя проблема на самом деле заключается в том, что я пытался работать с объектом с нулевым указателем в моей заглушкефункция в удаленном процессе, которая, в свою очередь, выдавала исключение посылки для nullpointerexception в результате, которое она возвращала, и похоже на то, о чем спрашивает этот оригинальный вопрос.используя его:)

т.е. я добавил оператор 'if', как и следовало ожидать при реализации функции-заглушки ...

if( myobject != null )
{
   myobject.dosomething() 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...