Я застрял в проблеме -
Существует API входа в систему - / user / login И я получаю правильный ответ в Почтальоне -
{ "user": {
"um_id": "6446066c88d44fd787060bc6b662a84d",
"first_login": false,
"role": "APPLICANT",
"name": "riyo riyo",
"phone": "250231456987",
"applicant_id": "ea59ab45-760b-4f3d-99a8-f64da3c5a72a" // this is the field which updated at later stage from backend team.
}
}
Но когда я звонютот же API из Android-приложения, использующий модификацию, тогда он не дает полного ответа, отсутствует параметр заявитель_идентификатора , который был обновлен на более поздней стадии от бэкэнд-команды.
Ответ от мобильного приложения с использованием Retrofit -
{
"user": {
"um_id": "6446066c88d44fd787060bc6b662a84d",
"first_login": false,
"role": "APPLICANT",
"name": "riyo riyo",
"phone": "250231456987"
}}
Вы, ребята, видите, что заявитель_ид не приходит при вызове из приложения для Android, но он приходит, если я вызываю тот же API из почтальон .
Вот мой код класса ApiClient.java -
public static Retrofit getClient() {
if (retrofit == null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request;
request = original.newBuilder()
.build();
Response response = chain.proceed(request);
return response;
}
});
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(interceptor);
OkHttpClient okHttpClient = builder
.connectTimeout(5*60, TimeUnit.SECONDS)
.readTimeout(5*60, TimeUnit.SECONDS).
build();
retrofit = new Retrofit.Builder()
.baseUrl(ApiEndPoint.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
}
return retrofit;
}
Вот мой код вызова API -
ApiHelper mApiHelper = ApiClient.getClient().create(ApiHelper.class);
LoginRequest mLoginRequest = new LoginRequest();
mLoginRequest.setClient(client);
mLoginRequest.setDevicetoken(deviceToken);
mLoginRequest.setEmail(email);
mLoginRequest.setPassword(password);
Gson gson = new GsonBuilder().create();
Logger.logsError(TAG, "JSON requestModal : " + gson.toJson(mLoginRequest));
mApiHelper.doLogin(mLoginRequest).enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
Logger.logsError(TAG, "onResponse Called : " + response.toString() + " \n call : " + call.request() + "\n " +
response.body() + "\n " + response.errorBody() + "\n " + response.code());
if (response.code() == 200) {
getMvpView().hideLoading();
Logger.logsError(TAG, "response Header auth-token : " + response.headers().get("auth-token"));
Gson mGson1 = new Gson();
LoginResponse mLoginResponse = mGson1.fromJson(response.body().toString().trim(),
LoginResponse.class);
MyPreference.setUserData(mLoginResponse);
getMvpView().showMessage("login successful");
MyPreference.saveUserAuthToken(mLoginResponse.getToken().getAccessToken());
Logger.logsError(TAG,"response BODY : " + response.body().toString());
getMvpView().openHomeScreen();
} else if (response.code() == 401) {
getMvpView().showMessage(R.string.sessionExpireText);
getMvpView().openActivityOnTokenExpire();
} else {
getMvpView().onError(R.string.some_error);
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
Logger.logsError(TAG, "onFailure Called");
t.printStackTrace();
getMvpView().hideLoading();
getMvpView().onError(R.string.some_error);
}
});
LoginResponse.class
public class LoginResponse {
@SerializedName("token")
@Expose
private LoginTokenModal token;
@SerializedName("user")
@Expose
private LoginUserData user;
public LoginTokenModal getToken() {
return token;
}
public void setToken(LoginTokenModal token) {
this.token = token;
}
public LoginUserData getUser() {
return user;
}
public void setUser(LoginUserData user) {
this.user = user;
}
}
LoginUserData.class
public class LoginUserData {
@SerializedName("um_id")
@Expose
private String umId;
@SerializedName("first_login")
@Expose
private Boolean firstLogin;
@SerializedName("role")
@Expose
private String role;
@SerializedName("name")
@Expose
private String name;
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("applicant_id")
@Expose
private String applicantId;
public String getUmId() {
return umId;
}
public void setUmId(String umId) {
this.umId = umId;
}
public Boolean getFirstLogin() {
return firstLogin;
}
public void setFirstLogin(Boolean firstLogin) {
this.firstLogin = firstLogin;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getApplicantId() {
return applicantId;
}
public void setApplicantId(String applicantId) {
this.applicantId = applicantId;
}
}
LoginTokenModal.class
public class LoginTokenModal {
@SerializedName("access_token")
@Expose
private String accessToken;
@SerializedName("token_type")
@Expose
private String tokenType;
@SerializedName("refresh_token")
@Expose
private String refreshToken;
@SerializedName("expires_in")
@Expose
private Integer expiresIn;
@SerializedName("scope")
@Expose
private String scope;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public Integer getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(Integer expiresIn) {
this.expiresIn = expiresIn;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
}