Я создал веб-сервис REST с использованием SSL, т. Е. https://api.bmcstudios.org
Конечная точка, к которой я пытаюсь обратиться:
GET https://api.bmcstudios.org/member
Ожидаемый ответ
{
"members": [
{
"memberId": "5c4e448d46e0fb0001656a46",
"email": "email@gmail.com",
"displayName": "username",
"firstName": "First",
"lastName": "Last",
"address": {
"street_1": "Street Address 1",
"street_2": "",
"city": "City",
"state": "ST",
"zipCode": 55555,
"country": "US"
},
"phone": "123-456-7890",
"roles": [
{
"id": "5c47fe53473d4ad05bdf99f5",
"role": "ROLE_MEMBER"
}
]
}
]
}
Я получаю этот ответ, когда использую Postman и когда запускаю эмулятор Android Pixel 2 XL API 28
.
При развертывании моей сборки через комплект приложений Android в последней версии Android Studio 3.3в магазине Google Play через Internal Test Track
и Production Track
я могу подключиться к своему веб-сервису.Но ответ, который я получил, пуст!
Вот что мои журналы показывают как ответ:
I/System.out: appWebservice.getMemberDetails(): {"members":[{},{},{}]}
Структура присутствует, но объект Member в массиве не отображается.Вот мой код Java ниже:
Интерфейс Retrofit2
public interface AppWebservice {
String API_URL = "https://api.bmcstudios.org/";
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
Retrofit RETROFIT = new Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
// MEMBER
@GET("member")
Call<MemberResponse> getMemberDetails(
@HeaderMap Map<String, String> headers);
}
Объект ответа члена
@Getter
@Setter
@NoArgsConstructor
public class MemberResponse implements Serializable {
@SerializedName("members")
@Expose
private List<Member> members;
@Getter
@Setter
@NoArgsConstructor
public class Member implements Serializable {
@SerializedName("memberId")
@Expose
private String memberId;
@SerializedName("email")
@Expose
private String email;
@SerializedName("displayName")
@Expose
private String displayName;
@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("lastName")
@Expose
private String lastName;
@SerializedName("picture")
@Expose
private String picture;
@SerializedName("address")
@Expose
private Address address;
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("roles")
@Expose
private List<Role> roles;
@Getter
@Setter
@NoArgsConstructor
public class Address implements Serializable {
@SerializedName("street_1")
@Expose
private String street1;
@SerializedName("street_2")
@Expose
private String street2;
@SerializedName("city")
@Expose
private String city;
@SerializedName("state")
@Expose
private String state;
@SerializedName("zipCode")
@Expose
private Integer zipCode;
@SerializedName("country")
@Expose
private String country;
}
@Getter
@Setter
@NoArgsConstructor
public class Role implements Serializable {
@SerializedName("id")
@Expose
private String id;
@SerializedName("role")
@Expose
private String role;
}
}
}
Созданиесервисный вызов в приложении:
public void getMemberDetails() {
if (getIdToken().getValue() == null) {
updateIdToken();
} else {
Map<String, String> headers = new HashMap<>();
headers.put("Content-type", "application/json");
headers.put(FIREBASE_AUTH_HEADER, getIdToken().getValue());
appWebservice.getMemberDetails(headers)
.enqueue(new Callback<MemberResponse>() {
@Override
public void onResponse(
@NonNull Call<MemberResponse> call,
@NonNull retrofit2.Response<MemberResponse> response) {
if (response.body() != null) {
System.out.println("appWebservice.getMemberDetails(): " + new Gson().toJson(response.body()));
for (MemberResponse.Member member : response.body().getMembers()) {
MemberEntity memberEntity =
toEntity(new Gson().toJson(member));
if (isNotBlank(memberEntity.getMemberId())) {
repository.storeMemberDetails(memberEntity);
}
}
}
}
@Override
public void onFailure(
@NonNull Call<MemberResponse> call, @NonNull Throwable t) {
System.err.println("appWebservice.getMemberDetails(): " + t.getMessage());
}
});
}
}
Я не набираю onFailure
вызов, потому что сервисный вызов выполнен успешно.Я получаю ответ json, но, похоже, он не обрабатывается правильно, т. Е. Отсутствуют данные в объектах массива.
Эта проблема возникает только при развертывании моего .apk через магазин Google Play.
Пожалуйста, помогите мне решить эту проблему!Спасибо