Retrofit2 and Swagger PetStore Запрос пользователя
уважаемые знатоки, у меня возникла проблема с подключением к тестовой API Swagger.
Суть проблемы в том что при запросе к https://petstore.swagger.io/v2/ с использованием пути user{username} у меня возникает ошибка, а именно отрабатывает только onFailure , а если неправильно задаю строку подключения то выдает ошибку 404
Прошу объясните в чем может быть ошибка, можно еще и показать конечно.
MainActivity
private TextView idText,usernametext,firstnameText,lastnameText,emailText,passwordText,phoneText,userstatusText;
String url = "https://petstore.swagger.io/v2/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idText = findViewById(R.id.id);
usernametext = findViewById(R.id.username);
firstnameText = findViewById(R.id.firstname);
lastnameText = findViewById(R.id.lastname);
emailText = findViewById(R.id.email);
passwordText = findViewById(R.id.password);
phoneText = findViewById(R.id.phone);
userstatusText = findViewById(R.id.userstatus);
GetUser getUser = new GetUser();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
Call<List<GetUser>> call = jsonPlaceHolderApi.getUserPost("Test");
call.enqueue(new Callback<List<GetUser>>() {
@Override
public void onResponse(Call<List<GetUser>> call, Response<List<GetUser>> response) {
if(!response.isSuccessful()){
idText.setText("Code "+response.code());
return;
}
idText.setText(getUser.getUserid());
usernametext.setText(getUser.getUsername());
firstnameText.setText(getUser.getFirstname());
lastnameText.setText(getUser.getLastname());
emailText.setText(getUser.getEmail());
passwordText.setText(getUser.getPassword());
phoneText.setText(getUser.getPhone());
usernametext.setText(getUser.getUserstatus());
}
@Override
public void onFailure(Call<List<GetUser>> call, Throwable t) {
usernametext.setText(url+"user/Test");
idText.setText(t.getStackTrace().toString());
}
});
}
Класс с гетерами
public class GetUser {
private int userid;
private int id;
private String title;
private String body;
private String username;
private String firstname;
private String lastname;
private String email;
private String password;
private String phone;
private int userstatus;
private String message;
public String getMessage(){
return message;
}
public int getUserid() {
return userid;
}
public String getUsername() {
return username;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public String getPhone() {
return phone;
}
public int getUserstatus() {
return userstatus;
}
}
Интерфейс
public interface JsonPlaceHolderApi {
@GET("user/{username}")
Call<List<GetUser>> getUserPost(@Path("username") String username);
//Call<List<Post>> getPost();
}
Ответы (1 шт):
Вы не правильно парсите ответ от сервера. У вас в запросе ожидается List<GetUser>, но сервер вероятно вам возвращает объект внутри которого лежит этот список.
Вам надо взять JSON и в любом онлайн конверторе спарсить в нужный ответ. Можно так же для студии скачать плагин для конвертации.
Более точно сказать трудно, т.к. надо видеть ответ и ваши модельки, но проблема точно в том, что приложение ожидает не тот ответ который приходит от сервера.

