Попробуйте, это работает для меня.и это самый простой способ обработать ответ такого типа.
Запрос API с использованием ResponseBody,
Call<ResponseBody> call = .......
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
if (response.body() != null && response.body().string() != null) {
Object json = new JSONTokener(response.toString()).nextValue();
if (json instanceof JSONArray) {
MyResponse1 myResponse = new Gson().fromJson(response.body().string(), MyResponse1.class);
myResponse.getMessage().getEmail();
} else if (json instanceof JSONObject) {
MyResponse2 myResponse = new Gson().fromJson(response.body().string(), MyResponse2.class);
myResponse.getMessage();
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// Handle exception here
}
});
Взять два класса объектов для двух разных ответов:
// MyResponse1.java
public class MyResponse1 {
private boolean success;
private MessageBean message;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public MessageBean getMessage() {
return message;
}
public void setMessage(MessageBean message) {
this.message = message;
}
public static class MessageBean {
private List<String> email;
private List<String> password;
public List<String> getEmail() {
return email;
}
public void setEmail(List<String> email) {
this.email = email;
}
public List<String> getPassword() {
return password;
}
public void setPassword(List<String> password) {
this.password = password;
}
}
}
// MyResponse2.java
public class MyResponse2 {
private boolean success;
private String message;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}