【问题标题】:Response body empty using Retrofit2使用 Retrofit2 的响应体为空
【发布时间】:2019-02-24 14:11:40
【问题描述】:

所以我已经在 Postman 中尝试了这个请求,它工作正常。但是当我在 Android 中这样做时, response.body() 是空的。该请求发送一个用于登录的电子邮件和密码,并应返回带有其他详细信息的用户对象。

loginUser.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                if (response.isSuccessful()) {
                   loginView.onLoginResult(response.body());
                } else {
                    loginView.showLoginErrorResult();
                }
            }

这是我的改造界面:

public interface NetworkAPI {

   @POST("/login")
   Call<User> login(@Body UserLogin userLogin);
}

改造客户端:

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getAPI(String BASE_URL) {


    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(logging).build();

    if (retrofit == null) {
        retrofit = new Retrofit
                .Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

}

我的用户类:

public class User {

@SerializedName("id")
@Expose
private String id;

@SerializedName("token")
@Expose
private String token;

@SerializedName("email")
@Expose
private String email;

@SerializedName("firstName")
@Expose
private String firstName;

@SerializedName("lastName")
@Expose
private String lastName;

public User(String id, String token, String email, String firstName, String lastName) {
    this.id = id;
    this.token = token;
    this.email = email;
    this.firstName = firstName;
    this.lastName = lastName;
}
   //getters &setters...
}

邮递员请求:

{
    "email":"test@email.com",
    "password":"123456"
}

邮递员回复:

{
    "success": true,
    "payload": {
        "email": "test@email.com",
        "firstName": "test",
        "lastName": "test",
    }
}

我也收到 200 条响应,但没有关于正文的数据

【问题讨论】:

  • edit 并发布Retrofit 接口类、示例URL 和Postman 客户端截图。
  • 分享您的用户类和来自 Postman 的 Json 响应..
  • @IntsabHaider 我更新了我的帖子

标签: android api retrofit2 response


【解决方案1】:

像这样创建一个新模型

public class ResponseApi{
        boolean success;
        User payload;

        public boolean isSuccess() {
            return success;
        }

        public void setSuccess(boolean success) {
            this.success = success;
        }

        public User getPayload() {
            return payload;
        }

        public void setPayload(User payload) {
            this.payload = payload;
        }

    }

然后像这样更改您的代码

public interface NetworkAPI {

   @POST("users/login")
   Call< ResponseApi > login(@Body UserLogin userLogin);
}

希望它会起作用.. 实际上,由于结构不同,Retrofit 无法解析您的 json 对象。

【讨论】:

  • 调用 login(@Body UserLogin userLogin);更改后,您必须从其覆盖或实施的位置更改它..
猜你喜欢
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2020-11-12
相关资源
最近更新 更多