Ошибка не может разрешить метод при получении массива объекта с модификацией - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу получить массив объектов (JSON), а затем получить некоторое значение.

Я попытался сделать все как здесь: Как получить массив объектов с помощью gson / retrofit?

но у меня появляется ошибка подсказки от Android Studio, например Cannot resolve method 'getId()'

JSON:

[{
    "id": "551454",
    "rights": ["auth", "objects-prepaid-get"],
    "services": [{
        "service_id": "103",
        "options": {
            "sum": 0
        },
        "dismisable": 0
    }],
    "date_activate": "2017-11-11",
    "period": {
        "date_action": "2019-03-29",
        "after": 0
    },
    "ast": {
        "id": "3",
        "services": [{
            "service_id": "4",
            "dismisable": 0
        }, {
            "service_id": "5",
            "dismisable": 0
        }]
    },
    "ast_s": {
        "id": "82",
        "services": [{
            "service_id": "4",
            "dismisable": 0
        }, {
            "service_id": "5",
            "dismisable": 0
        }],
        "date": "2019-03-29",
        "dissmissable": 1
    }
}]

Что я делаюв деятельности:

onCreate(){
...
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        SomeAPI userClient2  = retrofit.create(SomeAPI.class);
        getUserInfo();

}

private void getUserInfo() {
        token = AppPreferences.getStringFromSh(getApplicationContext());
        Call<List<User>> call2 = userClient2.getInfoUser("Bearer " + token);

        call2.enqueue(new Callback<List<User>>() {
            @Override
            public void onResponse(Call<List<User>> call, Response<List<User>> response) {
                if (response.code() == 200){
                        id = response.body().getId(); //id - List<Integer>
                        tvAccount.append(" " + id);

                }
                else {
                    Toast.makeText(UserProfile.this, "Err while loading", Toast.LENGTH_SHORT).show();

                }
            }

            @Override
            public void onFailure(Call<List<User>> call, Throwable t) {
                Toast.makeText(UserProfile.this, "error!", Toast.LENGTH_SHORT).show();
            }
        });
    }

В интерфейсе у меня есть:

@GET("objects")
    Call<List<User>> getInfoUser(@Header("Authorization") String token);

В User.class у меня есть:

public class User {
    private List<Integer> id;
 public List<Integer> getId(){
        return id;
    }

    public void setId(List<Integer> id){
        this.id = id;
    }
}

Что не так с моим кодом?Где я допустил ошибку?

UPD:

Пробовал:

            id = response.body().get(0).getId();
            tvAccount.append(" " + id);

Получение:

Expected BEGIN_ARRAY but was StRING at line 1 column 9 path $[0].id

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Кажется, что response.body() возвращает List<User>, поэтому вам нужно получить доступ к одному элементу списка.пример:

response.body().get(0).getId();
0 голосов
/ 12 апреля 2019

вы не можете получить getId () прямо из списка

List<User> listUser=response.body();

если вы ожидаете более одного пользователя, вы должны просмотреть весь список пользователей, чтобы получить идентификаторы

for (User user : listUser) 
{ 
    List<Integer> listIds=user.getId();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...