【问题标题】:Retrofit call request only receiving message part, not body part改造调用请求只接收消息部分,不接收正文部分
【发布时间】:2020-03-19 00:15:08
【问题描述】:

对我的代码进行一些更改后,我可以向 API 发送改造请求。

现在的问题是我只从响应中接收消息部分,而不是正文部分。 这是界面:

public interface JsonPlaceHolderApi {

    @GET("posts")
    Call<List<Post>> getPosts();

    @FormUrlEncoded
    @POST("token")
    Call <ResponseBody> createLoginRequest(@Field("username") String username,
                                          @Field("password") String password,
                                          @Field("grant_type") String grant_type,
                                          @Field("latitude") String latitude,
                                          @Field("longitude") String longitude

                                          );
}

这是请求部分:

 private void login_Request() {


        Log.d("ESTOY EN LOGIN REQUEST", "ESTOY EN LOGIN REQUEST");

        JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);


        Call<ResponseBody> call = jsonPlaceHolderApi.createLoginRequest("HALEJANDRO", "ALEJANDR0123", "password", "19.4953148", "-99.1131595");

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Log.d("ESTOY EN LOGIN REQUEST", "ESTOY EN LOGIN REQUEST success "+response);




            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d("ESTOY EN LOGIN REQUEST", "ESTOY EN LOGIN REQUEST error");
            }
        });


    }

这是收到的响应:

Response{protocol=http/1.1, code=200, message=OK, url=http://10.....:5000/token}

我需要让身体部位进一步处理接收到的数据。

编辑

使用 REST API 客户端(如 postman)收到的响应如下所示:

【问题讨论】:

    标签: android retrofit2


    【解决方案1】:

    您将使用response.body() 获得响应正文。

    像这样:

    call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    if (response.isSuccessful()) {
                        String object = response.body().string();
                        Log.d("response string.....", object);
                    }
                }
    
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
    
                }
            });
    

    【讨论】:

      【解决方案2】:

      您为什么不简单地解组响应?

      public class MLoginResponse {
      
          @SerializedName(value="access_token")
          public String accessToken;
      
          @SerializedName(value="token_type")
          public String tokenType;
      
          @SerializedName(value="expires_in")
          public Long expiresIn;
      
          public String twoFactory;
      
          @SerializedName(value=".issued")
          public String issued;
      
          @SerializedName(value=".expires")
          public String expires;
      
      }
      

      您的请求应如下所示:

      @FormUrlEncoded
      @POST("token")
      Call<MLoginResponse> createLoginRequest(...);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多