我正在使用改造将登录详细信息通过api传递到服务器。对该api的发布请求仅接收电子邮件和密码,但响应返回的Json格式与POJO类所包含的格式不同。如何处理api响应?
我尝试将响应作为JSONObject返回,以帮助从api获取Json,但它不起作用。 该API返回包含用户名和登录令牌的成功json。
Call<LoginPost> call = apiLink.loginUser(useremail, userpassword);
call.enqueue(new Callback<LoginPost>() {
@Override
public void onResponse(Call<LoginPost> call, Response<LoginPost> response) {
if(!response.isSuccessful()){
String code = Integer.toString(response.code());
Toast.makeText(LoginPage.this, code, Toast.LENGTH_LONG).show();
}
else {
LoginPost postResponse = response.body();
Log.e("viewResponse",
postResponse.getSuccessResponse().toString());
return;
}
}
@Override
public void onFailure(Call<LoginPost> call, Throwable t) {
Log.e("error in createNewUser", t.getMessage());
}
});
邮政课:
@SerializedName("email")
String userEmail;
@SerializedName("password")
String userPassword;
public JSONObject getSuccessResponse() {
return successResponse;
}
@SerializedName("success")
JSONObject successResponse;
public String getUserEmail() {
return userEmail;
}
public String getUserPassword() {
return userPassword;
}
答案 0 :(得分:1)
在进行Retrofit调用时,不要对请求使用POJO类,而应使用与Response相匹配的POJO类。因为这只是使用参数进行调用,所以您甚至可能不需要Request对象,但是拥有一个对象没有任何危害。
您的代码应如下所示:
Call<LoginResponse> call = apiLink.loginUser(useremail, userpassword);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if(!response.isSuccessful()){
String code = Integer.toString(response.code());
Toast.makeText(LoginPage.this, code, Toast.LENGTH_LONG).show();
}
else {
LoginResponse postResponse = response.body();
Log.e("viewResponse",
postResponse.getSuccessResponse().toString());
return;
}
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Log.e("error in createNewUser", t.getMessage());
}
});
为进一步说明正在发生的情况,在创建参数化调用时,您要告诉Retrofit使用哪个对象来解析Response(如果要将对象用作发布主体数据,则需要以不同的方式声明API) :
@POST("auth/login")
Call<LoginResponse> loginUser(@Body LoginPost body);
Call<LoginResponse> call = apiLink.loginUser(LoginPost body);