2015-09-23 240 views
1

這是我的POST請求的聲明:改造:發送POST請求

@POST("/api/geo/getLoc") 
    public void getFriendsLocation(@Field("Id") int Id, @Field("Number") String Number, @Field("FriendNumber") String FriendNumber, Callback<JsonElement> response); 

這是我嘗試發送和處理此請求:

String ENDPOINT = "http://52.88.**.***"; 
FriendModel ff = new FriendModel(); 
     ff.setFriendNumber("380935275259"); 
     ff.setId(516); 
     ff.setNumber("380936831127"); 
     RestAdapter adapter = new RestAdapter.Builder() 
       .setEndpoint(ENDPOINT) 
       .build(); 
     WayfAPI api = adapter.create(WayfAPI.class); 
     api.getFriendsLocation(ff.getId(), ff.getNumber(), ff.getFriendNumber(), new Callback<JsonElement>() { 
      @Override 
      public void success(JsonElement jsonElement, Response response) { 
       String strObj = jsonElement.toString(); 
      } 

      @Override 
      public void failure(RetrofitError error) { 

      } 
     }); 

錯誤:

retrofit.RetrofitError: WayfAPI.getFriendsLocation: @Field parameters can only be used with form encoding. (parameter #1) 

我的要求有什麼問題?

+1

非常奇怪的是,諸如朋友的撤回位置的方法被標記爲POST而不是GET。你確定服務器正在考慮這種方法作爲POST? –

+0

@Hasslarn我知道這個方法的名稱有點不正確,但我確定那個POST方法 – neustart47

+0

你檢查過失敗方法是否被調用?這可能會爲您提供錯誤信息,例如來自服務器的HTTP代碼。 –

回答

3

我想你在你的方法聲明中忘記了@FormUrlEncoded註解。它應該是這樣的:

@FormUrlEncoded 
@POST("/api/geo/getLoc") 
public void getFriendsLocation(@Field("Id") int Id, @Field("Number") String Number, @Field("FriendNumber") String FriendNumber, Callback<JsonElement> response); 
+0

謝謝,這就是工作。我有代碼200響應,但我需要在響應JSON字符串,但我的strObject =「」。 請求是完全正確的。什麼可能是錯誤的? – neustart47

+1

這是另一個問題,似乎我正確回答了主要問題。它取決於您接收的響應數據格式。您應該定義描述JSON數據的POJO對象作爲響應,並在Callback接口中使用此對象。 – greenfrvr