Android Retrofit - Помещение ответа в arraylist - PullRequest
1 голос
/ 30 мая 2020

Привет, ребята, я успешно модернизировал получение данных из API отдыха и их печать в журнале. Однако когда я пытаюсь записать этот ответ в список массивов, я получаю сообщение об ошибке: «Невозможно вывести аргументы (невозможно разрешить конструктор). Эта ошибка отображается в скобках списка массивов <>

// Executes the network request on a background thread
        try {
            Response response = getWeather(locationCode, apiKey).execute();
            if (cancelRequest) {
                return;
            }
            if (response.code() == 200) {

                //  Weather weather = response.body().getWeather();
                Log.d(TAG, "onResponse: " + response.body().toString());

                List<Weather> list = new ArrayList<>(((Weather)response.body()));
                //mWeather.postValue(response);

Ответ GSON

 {
"coord": {
    "lon": -5.93,
    "lat": 54.58
},
"weather": [
    {
        "id": 804,
        "main": "Clouds",
        "description": "overcast clouds",
        "icon": "04d"
    }
],
"base": "stations",
"main": {
    "temp": 291.56,
    "feels_like": 286.36,
    "temp_min": 291.15,
    "temp_max": 292.15,
    "pressure": 1024,
    "humidity": 45
},

Если бы кто-нибудь мог мне помочь root, мы были бы очень признательны.

Ответы [ 2 ]

0 голосов
/ 31 мая 2020

Чтобы преобразовать ответ в пригодный для использования объект java, вам нужно будет использовать Gson или использовать Retrofit, чтобы сделать это автоматически. Поскольку вы получаете generi c Response из звонка, это означает, что вам придется сделать это самостоятельно. Поэтому сначала преобразуйте схему json в POJO, а затем вместо

List<Weather> list = new ArrayList<>(((Weather)response.body()));

используйте

ResponsePojo responsePojo = gson.fromJson(response.body().toString(), ResponsePojo.class); 

Однако вместо того, чтобы делать это вручную, вы должны правильно настроить Retrofit, чтобы он делает преобразование за вас. Тогда вы вернете свой объект прямо после обращения к модернизации -

Response<ResponsePojo> response = getWeather(locationCode, apiKey).execute();
ResponsePojo responsePojo = response.body()
0 голосов
/ 30 мая 2020

Мне кажется, что созданный вами класс POJO может быть неправильным, поскольку вы не предоставили общий доступ к своему классу POJO, попробуйте следующий класс POJO в своем коде и посмотрите, сохраняется ли ошибка.

public class Weather {

private coordinate coord;
private ArrayList<weatherinfo> weather;
private String base;
private maininfo main;

public coordinate getCoord() {
    return coord;
}

public ArrayList<weatherinfo> getWeather() {
    return weather;
}

public String getBase() {
    return base;
}

public maininfo getMain() {
    return main;
}

public static class coordinate{
    String lon,lat;

    public String getLon() {
        return lon;
    }

    public String getLat() {
        return lat;
    }
}

public static class weatherinfo{
    String id,main,description,icon;

    public String getId() {
        return id;
    }

    public String getMain() {
        return main;
    }

    public String getDescription() {
        return description;
    }

    public String getIcon() {
        return icon;
    }
}

public static class maininfo{
    String temp,feels_like,temp_min,temp_max,pressure,humidity;

    public String getTemp() {
        return temp;
    }

    public String getFeels_like() {
        return feels_like;
    }

    public String getTemp_min() {
        return temp_min;
    }

    public String getTemp_max() {
        return temp_max;
    }

    public String getPressure() {
        return pressure;
    }

    public String getHumidity() {
        return humidity;
    }
}
}

После этого, читая ваш ответ, попробуйте это следующим образом.

ArrayList<Weather.weatherinfo> list = response.body().getWeather();

Happy Coding

...