2015-09-23 241 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