簡體   English   中英

Jersey客戶端API問題

[英]Jersey Client API Problem

我正在編寫一個調用Web服務的Android客戶端。 該服務使用JAX-RS / Jersey API編寫。 我也試圖在android端使用Jersey-Client API。

        Client client = Client.create();
        WebResource webResource = client.resource(server + "/api/restaurant_info/update");
        MultivaluedMap formData = new MultivaluedMapImpl();
        formData.add("id", id);
        formData.add("f", Boolean.toString(f));
        formData.add("fId", fId);
        ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, formData);
        RestInfo restInfo = response.getEntity(RestInfo.class);
        return restInfo;

我已經在外部測試了Web服務,它似乎工作正常。 當我嘗試從我的應用程序中調用它時,我在ClientResponse行遇到NullPointerException。

03-26 14:15:43.735: WARN/System.err(1060): java.lang.NullPointerException
03-26 14:15:43.745: WARN/System.err(1060):     at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
03-26 14:15:43.745: WARN/System.err(1060):     at com.sun.jersey.api.client.PartialRequestBuilder.type(PartialRequestBuilder.java:92)
03-26 14:15:43.755: WARN/System.err(1060):     at com.sun.jersey.api.client.WebResource.type(WebResource.java:309)
03-26 14:15:43.755: WARN/System.err(1060):     at com.era.external.era.ERAService.updateRestaurantFranchise(ERAService.java:80)
03-26 14:15:43.755: WARN/System.err(1060):     at com.era.android.RestaurantActivity$4.onItemSelected(RestaurantActivity.java:201)
03-26 14:15:43.755: WARN/System.err(1060):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:856)
03-26 14:15:43.766: WARN/System.err(1060):     at android.widget.AdapterView.access$200(AdapterView.java:41)
03-26 14:15:43.766: WARN/System.err(1060):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:827)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Handler.handleCallback(Handler.java:587)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Looper.loop(Looper.java:123)
03-26 14:15:43.786: WARN/System.err(1060):     at android.app.ActivityThread.main(ActivityThread.java:3948)
03-26 14:15:43.786: WARN/System.err(1060):     at java.lang.reflect.Method.invokeNative(Native Method)
03-26 14:15:43.796: WARN/System.err(1060):     at java.lang.reflect.Method.invoke(Method.java:521)
03-26 14:15:43.796: WARN/System.err(1060):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
03-26 14:15:43.796: WARN/System.err(1060):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
03-26 14:15:43.806: WARN/System.err(1060):     at dalvik.system.NativeStart.main(Native Method)

關於我做錯了什么的任何想法?

我也是澤西新手,但我認為你的郵政編碼不起作用的原因是formData必須是接受的類型之一。 我不完全確定在這個上下文中類型和接受命令之間的區別,但我很確定formData必須是您的調用構建器支持的類型之一。 例如,如果您將formData序列化為JSON對象並將type / accept設置為JSON,那么此代碼將起作用。 因為它可能正在調用一些bodymethodwriter將其序列化為可接受的類型,但formData沒有一個,所以方法調用返回null。 實際上,它看起來像調用ValueOf來嘗試從formData中獲取數據以進行序列化,但返回null。

從堆棧跟蹤來看,這可能是一件很糟糕的事情

  • updateRestaurantFranchise方法中的ERAService line 80 ERAService line
  • onItemSelected方法中的RestaurantActivity 201行

Android擁有Dalvik虛擬機,而非原始JVM。 我認為這就是為什么Jersey Client API在Android OS中不起作用的原因。 但我確定!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM