2010-10-19 3 views
10

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

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) 

Это, кажется, выброшено из класса прокси-генерируемый из. файл helpl.

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

+0

Вы смогли это решить? У меня такая же проблема. – folone

+3

Можете ли вы опубликовать файл helpl и код для посыльного –

+0

, похожее на это: http://www.anddev.it/index.php?topic=1175.0 –

ответ

11

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

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

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

Мое решение было просто, чтобы проверить объект не был нулевым, прежде чем использовать это :)

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

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

Я просто поместил вызов в блок try/catch, чтобы избежать изменения автоматически сгенерированного кода :) – rciovati

Смежные вопросы