#java #android #api #rest #retrofit
#java #Android #API #отдых #модернизация
Вопрос:
вот вложенный запрос JSON
{
"user": {
"email": "123@mail.com",
"password": "12345678"
}
}
вот вложенный ответ JSON
{
"data": {
"renew_token": "e994c4d2-d93b-47e8-ab5f-9090b823f249",
"token": "419fff70-b1ee-4ea7-b636-ddbec6346794"
}
}
я могу отправить запрос, но я изо всех сил пытаюсь закодировать ответ в том же процессе
мой интерфейс в настоящее время
public interface JsonApi {
@POST("session")
Call<RootUser> userLogin(@Body RootUser rootUser);
}
Модель для запроса
public class User{
public String email;
public String password;
}
public class RootUser{
public User user;
}
вызов API
private void userLogin(){
String email = etloginemail.getText().toString();
String password = etloginpassword.getText().toString();
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://the-digest-app.herokuapp.com/api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
JsonApi jsonApi = retrofit.create(JsonApi.class);
User user = new User(email, password);
RootUser rootUser = new RootUser(user);
Call<RootUser> call = jsonApi.userLogin(rootUser);
call.enqueue(new Callback<RootUser>() {
@Override
public void onResponse(Call<RootUser> call, Response<RootUser> response) {
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<RootUser> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
}
Как определить функцию получения ответа? если я сделал что-то не так, пожалуйста, скажите мне!
Комментарии:
1. Ваш запрос и ответ отличаются! Вам понадобятся разные POJO, как сказал @mehmet. Откуда мы это знаем? И запрос, и ответ содержат два ключа типа string, но оба имеют разные имена ключей!
Ответ №1:
Вы должны создать еще один POJO для ответа типа
public class LoginResponse{
@SerializedName("renew_token")
public String renewToken;
@SerializedName("token")
public String token;
}
public class UserLoginResponse{
public LoginResponse data;
}
и ваш модифицированный интерфейс должен выглядеть следующим образом
public interface JsonApi {
@POST("session")
Call<UserLoginResponse> userLogin(@Body RootUser rootUser);
}
и реализация вашего вызова
call.enqueue(new Callback<UserLoginResponse>() {
@Override
public void onResponse(Call<UserLoginResponse> call, Response<UserLoginResponse> response) {
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(Call<UserLoginResponse> call, Throwable t) {
Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
Комментарии:
1. Я создал POJO и отредактировал интерфейс, можете ли вы помочь мне с вызовом get response? я борюсь, потому что он во вложенном формате json.
2. Я отредактировал свой ответ и добавил реализацию.
3. Спасибо за вашу помощь! извините, если мои вопросы недостаточно ясны, но я на самом деле прошу код для получения ответа «token» и «renew_token» для хранения внутри класса LoginResponse. Если вы можете помочь, это было бы очень ценно!
4. Неважно, я уже понял это. Было бы невозможно без вашей помощи, хотя 🙂