Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Rom96
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 35
#1

Retrofit 2. Возвращаемое значение == null - Android

18.09.2016, 17:48. Просмотров 373. Ответов 4

Делаю небольшое приложение для VK. Решил использовать Retrofit 2. Набросал простенький запрос, но в ответ приходит код 200 и null.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public interface ApiInterface {
 
public static final String BASE_URL = "https://api.vk.com/method/";
 
@GET("users.get?user_ids=210700286&v=5.53")
Call<ProfileInfo> getProfileInfo();
 
 
public static final Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
}
Вот что в Activity

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ApiInterface apiInterface = ApiInterface.retrofit.create(ApiInterface.class);
    Log.d("123", "After RETROFIT CLIENT " + mAccount.getAccessToken());
 
 
 
 
        Call<ProfileInfo> call = apiInterface.getProfileInfo();
        call.enqueue(new Callback<ProfileInfo>() {
            @Override
            public void onResponse(Call<ProfileInfo> call, Response<ProfileInfo> response) {
                Log.d("123", "IN QUERY " + response.code());    /*response.code == 200*/
 
                  ProfileInfo profileInfo = response.body();   /*Возвращает null*/
 
                    Log.d("123", profileInfo.toString());
 
                }
            }
 
            @Override
            public void onFailure(Call<ProfileInfo> call, Throwable t) {
 
            }
        });
Модель

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class ProfileInfo {
 
@SerializedName("id")
public int ID;
@SerializedName("first_name")
public String firstName;
@SerializedName("last_name")
public String lastName;
 
 
 
public String getFirstName() {
    return firstName;
}
 
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
 
public String getLastName() {
    return lastName;
}
 
public void setLastName(String lastName) {
    this.lastName = lastName;
}
 
@Override
public String toString() {
    String s;
    return s= getFirstName() + " " + getLastName();;
}
}
Ответ в виде

JSON
1
2
3
4
5
response: [{
id: 210700286,
first_name: 'Lindsey',
last_name: 'Stirling'
}]
Пробовал через errorBody, приложение крашится.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2016, 17:48     Retrofit 2. Возвращаемое значение == null
Посмотрите здесь:

Прокладывание маршрута и Retrofit Android
Retrofit async не успевает загрузить данные Android
Android OPTIONS запросы в Retrofit
Android Retrofit, JSON, @POST, @GET
Разницы между OkHTTP AND Retrofit Android
Библиотека Retrofit Android
Retrofit Recyclerview Android
Android Ошибка JSON в Retrofit
Android Retrofit + simpleXml может у кого есть примеры?
Android Получить заголовоки http ответа в retrofit
Android Относительные пути в аннотациях Retrofit
Android Retrofit 2 эффективная обработка разных ответов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fraley
92 / 92 / 32
Регистрация: 24.05.2015
Сообщений: 277
18.09.2016, 21:07     Retrofit 2. Возвращаемое значение == null #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Rom96 Посмотреть сообщение
Пробовал через errorBody, приложение крашится.
Модель у вас не правильная.

Должно быть примерно так:

MainActivity

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        ApiInterface vkService= ApiInterface.retrofit.create(ApiInterface.class);
        Call<ProfileInfo> call=vkService.getProfileInfo("210700286","5.53");
 
        call.enqueue(new Callback<ProfileInfo>() {
            @Override
            public void onResponse(Call<ProfileInfo> call, retrofit2.Response<ProfileInfo> response) {
                ArrayList<Response> userArray=response.body().getResponse();
                for(Response user:userArray){
                    Toast.makeText(MainActivity.this, "First Name: "+user.getFirstName()+"\n" +
                            "Last Name: "+user.getLastName()+"\n"+"ID: "+user.getId(), Toast.LENGTH_SHORT).show();
                }
 
            }
 
            @Override
            public void onFailure(Call<ProfileInfo> call, Throwable t) {
                Toast.makeText(MainActivity.this, ""+t, Toast.LENGTH_SHORT).show();
            }
        });
 
    }
}
Retrofit API
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface ApiInterface {
 
    public static final String BASE_URL = "https://api.vk.com/method/";
 
    @GET("users.get?")
    Call<ProfileInfo> getProfileInfo(
            @Query("user_ids") String user_ids,
            @Query("v") String version
    );
    public static final Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}
И модель состоящая из двух класов:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class ProfileInfo {
    @SerializedName("response")
    private ArrayList<Response> response = new ArrayList<Response>();
    public ArrayList<Response> getResponse() {
        return response;
    }
    public void setResponse(ArrayList<Response> response) {
        this.response = response;
    }
 
}
 
public class Response {
 
    @SerializedName("id")
    private int id;
    @SerializedName("first_name")
    private String firstName;
    @SerializedName("last_name")
    private String lastName;
 
 
    public int getId() {
        return id;
    }
    public void setId(int id) {this.id = id;}
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
}
Rom96
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 35
19.09.2016, 19:03  [ТС]     Retrofit 2. Возвращаемое значение == null #3
Спасибо!

Добавлено через 18 часов 18 минут
Скажите, выходит, грубо говоря для каждого запроса необходимо делать 2 класса модели? Для самого объекта ответа и для его полей?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
19.09.2016, 19:28     Retrofit 2. Возвращаемое значение == null #4
Цитата Сообщение от Rom96 Посмотреть сообщение
для каждого запроса необходимо делать 2 класса модели? Для самого объекта ответа и для его полей?
Один класс - для полей (для каждого запроса - отдельный класс). В другом классе можно хранить список запросов, ни к чему создавать каждый раз отдельный класс. Также можно создать для обработки ошибок отдельные классы со список полей. Их структура зависит от того, что будет присылать сервер вместе с ошибкой.
fraley
92 / 92 / 32
Регистрация: 24.05.2015
Сообщений: 277
19.09.2016, 20:33     Retrofit 2. Возвращаемое значение == null #5
Цитата Сообщение от Rom96 Посмотреть сообщение
Скажите, выходит, грубо говоря для каждого запроса необходимо делать 2 класса модели? Для самого объекта ответа и для его полей?
Ну так это же зависит от того какой ответ приходит от сервера.
Может быть такой, что потребуется с десяток классов, чтоб Retrofit его корректно распарсил.
Я лично пользуюсь этим сайтом для получения моделей:
http://www.jsonschema2pojo.org/
Yandex
Объявления
19.09.2016, 20:33     Retrofit 2. Возвращаемое значение == null
Ответ Создать тему
Опции темы

Текущее время: 09:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru