改造调用请求只接收消息部分,不接收正文部分
Retrofit call request only receiving message part, not body part
对我的代码进行一些更改后,我可以向 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 客户端收到的响应,如邮递员,如下所示:
您将使用 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) {
}
});
你为什么不简单地解组响应?
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(...);
对我的代码进行一些更改后,我可以向 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 客户端收到的响应,如邮递员,如下所示:
您将使用 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) {
}
});
你为什么不简单地解组响应?
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(...);