2011-12-20 30 views
6

Mã của tôi là:Bắt NullPointException với Jersey REST của khách hàng trên Android

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); 

Dòng cuối cùng gây ra vấn đề, và tôi nhận được một vấn đề tương tự nếu tôi thay thế nó với 2 nhận xét dòng với sự khác biệt mà tôi nhận được ngoại lệ trên một dòng khác của 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 và jersey-core.jar đã được thêm vào gói ở cấp cao nhất và đã được thêm vào thư viện trong đường dẫn xây dựng.

AndroidManifest.xml chứa:

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

vẫn đang tìm kiếm câu trả lời. – necromancer

+0

tôi thực sự muốn xem mã đã sửa đổi, mọi cập nhật? –

+0

@Sponge, xin lỗi tôi đang theo dõi một ca khúc khác và sẽ mất vài tuần trước khi tôi làm bất kỳ điều gì liên quan đến Android. Tôi đã không sử dụng mã kiểm soát và mã nằm trong một số thư mục riêng biệt. Tôi có thể nhận được rằng nếu bạn nhắc nhở tôi trong một tuần hoặc lâu hơn, nhưng trong khi đó, hãy xem xét: (1) android classloader không thể đọc chú thích cấp gói mà ngăn JAXB từ khởi tạo; có thể khắc phục bằng quét thủ công; đó là chìa khóa tôi nhớ; (2) các lớp học và các cuộc gọi của họ phải được chuyển đến các gói khác nhau vì javax bị hạn chế; (3) kết quả là một tệp jar khá lớn có thể không hoạt động để phân phối – necromancer

Trả lời

3

Đây là một bài tập rất lớn. Tôi tin rằng tôi có thể là người duy nhất chưa nhận được Jersey + JAXB hoạt động trên Android. Một câu trả lời cụ thể sẽ không giúp đỡ bởi vì sau khi tôi nhận được xung quanh này NullPointerException tôi có ngoại lệ khác, và sau đó khác.

Tôi phải thay đổi mã nguồn cho Jersey và JAXB để thực hiện điều này. Và tôi cũng phải đóng gói lại các lọ.

Xin lỗi tôi biết đây là câu trả lời có chất lượng kém nhưng hãy bình luận cho tôi nếu ai đó thực sự muốn đi xuống con đường khó khăn này trong trường hợp tôi có thể truy lại các bước của mình và giúp đỡ.

+0

Tại sao bạn không đóng góp mã trở lại Jersey?Rất nhiều người sẽ rất hạnh phúc :) –

+0

Tôi sẽ cố gắng làm như vậy khi tôi quay trở lại theo dõi phát triển này (Tôi sẽ phải hiểu lại và xác định/tóm tắt tài liệu về các cập nhật chính xác). Bây giờ tôi đã bị bỏ rơi trên một cái gì đó khác. Cảm ơn vì đề nghị này :) – necromancer

+0

Đó thực sự là necromancer tuyệt vời tôi đang mắc kẹt tại cùng một điểm ... bạn có thể giúp tôi không? tên này tôi đoán bạn là DotA hay người hâm mộ ngai vàng đông lạnh –

1

tôi đã cùng một vấn đề với jersey. Tôi chuyển sang Google Gson và mọi thứ đã hoạt động OK.

+0

Cảm ơn bạn rất nhiều vì đã cho tôi biết giải pháp của bạn - Tôi đang tìm cách tuân theo tiêu chuẩn trước khi hoàn toàn từ bỏ và chuyển sang không thư viện chuẩn. Tôi nhận ra trong Android có thể không có cách nào khác nhưng tôi muốn hoàn toàn chắc chắn trước khi chuyển đổi. – necromancer

+0

oh, xin vui lòng upvote câu hỏi nếu bạn cũng sẽ được quan tâm đến độ phân giải. – necromancer

+0

Tại sao áo nào tiêu chuẩn hơn gson? – Kevin

Các vấn đề liên quan