Ожидаемый BEGIN_ARRAY, но STRING Retrofit - PullRequest
0 голосов
/ 04 мая 2019

Я очень медленный и не могу понять, как я могу инициализировать, что я вхожу в объект, затем в массив.Я пытался сделать новый Gson из компонентов, но я не знаю как.Должен ли я создать новый класс внутри модели, это также массив?И затем выполните <ArrayList<Component.Components(inside class)>>?

Модель

public class Component {
    @SerializedName("total")
    transient private Integer total;
    @SerializedName("rows")
    private ArrayList<Rows> rows;

    public class Rows {
        @SerializedName("name")
        private String name;
        @SerializedName("image")
        private String image;
        @SerializedName("serial")
        private String serial;
        @SerializedName("purchase_cost")
        private String cost;

        public Rows(String name, String image, String serial, String cost) {
            this.name = name;
            this.image = image;
            this.serial = serial;
            this.cost = cost;
        }

   //getters
    }

}

API

   @GET("api/v1/components")
   Call<ArrayList<Component.Rows>> listComponents();

MainActivity

     JsonPlaceHolderApi jsonPlaceHolderApi = ApiClient.getClient().create(JsonPlaceHolderApi.class);
        Call<ArrayList<Component.Rows>> call = jsonPlaceHolderApi.listComponents();

        call.enqueue(new Callback<ArrayList<Component.Rows>>() {
            @Override
            public void onResponse(@NonNull Call<ArrayList<Component.Rows>> call, @NonNull Response<ArrayList<Component.Rows>> response) {

                ArrayList<Component.Rows> posts = response.body();
                componentAdapter = new ComponentAdapter(getApplicationContext(),posts);
                listView.setAdapter(componentAdapter);
            }

JSON:

{
    "total": 1,
    "rows": [
        {
            "id": 1,
            "name": "HP ENVY x360 - 13-ag0017nn - 4UE32EA AMD® Raven Ridge Ryzen 7 2700U do 3.8GHz, 13.3&quot;, 512GB SSD, 8GB",
            "image": "http://server/uploads/components/7cDXBttwk2O5p5sEM5T9raBvW.png",
            "serial": "193015227095",
            "location": {
                "id": 1,
                "name": "ICB"
            }, 

Это ответ JSON.

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Согласно вашему ответу JSON

{
    "total": 1,
    "rows": [
        {
            "id": 1,
            "name": "HP ENVY x360.....",
            "image": "http://server/uploads/components/7cDXBttwk2O5p5sEM5T9raBvW.png",
            "serial": "193015227095",
            "location": {
                "id": 1,
                "name": "ICB"
            }
        },
        .. similar objects ...
    ]
}

Ваша полученная структура класса должна быть похожа на

class ResponseData {
    private int total;
    private List<RowData> rows;
    // todo: getters & setters

    public class RowData {
        private int id;
        private String name;
        // etc etc
        private LocationData location;

        public class LocationData {
            private int id;
            private String name;
            // etc etc
        }
    }
}

И тогда Ваш API и активность становятся

// API
Call<ResponseData> listComponents();

// activity code
Call<ResponseData> call = jsonPlaceHolderApi.listComponents();

// reading rows
ResponseData response = response.body();
response.getRows();

Надеюсь, вы понимаете это.

0 голосов
/ 04 мая 2019

Я не знаком с вашим кодом, но надеюсь, что мой ответ поможет вам. Вы можете получить ArrayList из массива, используя класс Arrays, так как

Arrays.asList(myArray);

он также возвращает список элементов в myArray.принимает параметр var, который вы можете использовать в одной строке, например

List<Integer> l = new ArrayList<>(asList(5,4,4,4));

или

Integer[]arr = new Integer[5];
    List<Integer> l = new ArrayList<>(asList(arr));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...