2011-12-20 10 views
6

Mój kod to:Pierwsze NullPointException z Jersey REST klienta na Androida

Client client = Client.create(); 
    WebResource web_resource = client.resource("http://www.myhostname.com/"); 
    // String string = web_resource.path("foo").accept("text/xml").get(String.class); 
    // Log.d(getClass().getCanonicalName(), "jax-rs client string = " + string); 
    Num num = web_resource.path("foo").accept(MediaType.TEXT_XML_TYPE).get(Num.class); 

Ostatnia linia powoduje problem i mam podobny problem, czy zastąpić go z 2 skomentował linie z tą różnicą, że dostanę wyjątek na innej linii MediaType.java.

E/AndroidRuntime( 840): Caused by: java.lang.NullPointerException 
E/AndroidRuntime( 840): at javax.ws.rs.core.MediaType.toString(MediaType.java:265) 
E/AndroidRuntime( 840): at com.sun.jersey.api.client.ClientRequest.getHeaderValue(ClientRequest.java:232) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.writeOutBoundHeaders(URLConnectionClientHandler.java:276) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:197) 
E/AndroidRuntime( 840): at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147) 
E/AndroidRuntime( 840): ... 17 more 

Jersey client.jar i Jersey core.jar zostały dodane do pakietu na najwyższym poziomie i zostały dodane do bibliotek w kompilacji ścieżki.

AndroidManifest.xml zawiera:

<uses-permission android:name="android.permission.INTERNET" /> 
+0

wciąż szukają odpowiedzi. – necromancer

+0

Naprawdę chciałbym zobaczyć zmodyfikowany kod, jakieś aktualizacje? –

+0

@Sponge, przepraszam, jestem na innym utworze i upłyną tygodnie zanim zrobię coś związanego z Androidem. Nie użyłem kontroli kodu, a kod znajduje się w kilku oddzielnych katalogach. Mogę do tego dojść, jeśli przypomnisz mi za tydzień, ale w międzyczasie rozważ: (1) program ładujący klasy android nie może odczytać adnotacji na poziomie pakietu, który uniemożliwia inicjowanie JAXB; można naprawić za pomocą skanowania ręcznego; to był klucz, który pamiętam; (2) klasy i ich połączenia musiały zostać przeniesione do różnych pakietów, ponieważ javax jest ograniczony; (3) wynikiem był raczej duży plik JAR, który może nie działać w celu dystrybucji – necromancer

Odpowiedz

3

To było ogromne ćwiczenie. Wierzę, że mogę być jedyną osobą, która zdobyła oprogramowanie Jersey + JAXB działające na systemie Android. Konkretna odpowiedź nie pomoże, ponieważ po obejściu tego wyjątku NullPointerException dostałem inny wyjątek, a następnie inny.

Musiałem zmienić kod źródłowy dla Jersey i JAXB, aby tak się stało. Musiałem też przepakować słoiki.

Przykro mi, ale wiem, że jest to odpowiedź złej jakości, ale proszę o komentarz, jeśli ktoś naprawdę chce przejść tę trudną ścieżkę, w którym to przypadku mogę odtworzyć moje kroki i pomóc.

+0

Dlaczego nie wesprzesz kodu z powrotem na Jersey?Wiele osób byłoby bardzo zadowolonych :) –

+0

Postaram się to zrobić, gdy wrócę na tym torze rozwoju (będę musiał ponownie zrozumieć i zidentyfikować/pokrótce udokumentować poprawne aktualizacje). Jestem na razie odwrócony od czegoś innego. Dzięki za sugestię :) – necromancer

+0

To jest naprawdę wielki nekromanta utknąłem w tym samym punkcie ... możesz mi pomóc? pod tym imieniem, chyba jesteś fanem tronu lub zamarzniętym. –

1

miałem ten sam problem z Jersey. Przełączyłem się na Google Gson i wszystko działało dobrze.

+0

Dziękuję bardzo za poinformowanie mnie o twoim rozwiązaniu - staram się trzymać standardu zanim całkowicie zrezygnujesz i przejdziesz na standardowa biblioteka. Zdaję sobie sprawę, że w Androidzie może być inaczej, ale chcę być całkowicie pewny przed zmianą. – necromancer

+0

oh, poproś o odpowiedź na pytanie, czy byłbyś zainteresowany również rozwiązaniem. – necromancer

+0

Dlaczego koszulki są bardziej standardowe niż gson? – Kevin

Powiązane problemy