Тело ответа пустое с использованием Retrofit2 - PullRequest
0 голосов
/ 20 сентября 2018

Итак, я попробовал запрос в Почтальоне, и он отлично работает.Но когда я делаю это в 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();
                }
            }

Вот мой интерфейс Retrofit:

public interface NetworkAPI {

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

RetrofitClient:

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",
    }
}

Также я 'm получает ответ 200, но нет данных о теле

1 Ответ

0 голосов
/ 20 сентября 2018

Создайте новую модель, подобную этой

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);
}

Надеюсь, что это сработает. На самом деле, при модификации не удалось проанализировать ваш объект json из-заРазличная структура.

...