Как использовать Retrofit для анализа объекта JSON с объектами и массивами разных размеров? - PullRequest
0 голосов
/ 25 апреля 2018

Прежде всего, я хочу сказать, что я интенсивно искал, как это сделать, используя рекомендации (по крайней мере) следующих ссылок:

Анализ массива JSON, который содержит объекты с различнымиатрибуты с Retrofit https://medium.com/@dds861/json-parsing-using-retrofit-and-recycleview-2300d9fdcf15 http://instinctcoder.com/android-studio-parsing-json-using-retrofit/

Как проанализировать несколько массивов JSON внутри объекта JSON с помощью Gson?

ИспользованиеМодификация для доступа к массивам JSON

Как проанализировать список объектов JSON, окруженных [], используя Retrofit и GSON?

Однако все приведенные выше ссылки показываютКак проанализировать объекты / массивы JSON с объектами одного типа или объектами только в одном массиве.

Вот конкретные данные JSON, с которыми я работаю:

{  
  "coord":{  
  "lon":-83.92,
  "lat":34.08
},
"weather":[  
  {  
     "id":500,
     "main":"Rain",
     "description":"light rain",
     "icon":"10d"
  }
],
"base":"stations",
"main":{  
  "temp":292.16,
  "pressure":1011,
  "humidity":64,
  "temp_min":290.15,
  "temp_max":294.15
 },
"visibility":16093,
"wind":{  
  "speed":3.6,
  "deg":290,
  "gust":7.7
 },
"clouds":{  
  "all":90
 },
"dt":1524609300,
"sys":{  
  "type":1,
  "id":809,
  "message":0.0057,
  "country":"US",
  "sunrise":1524567171,
  "sunset":1524615295
 },
"id":420007383,
"name":"Athens",
"cod":200
  }

Я преобразовалвсе это pojo, используя jsonschema2pojo.org.У меня вопрос, как я могу использовать модификацию для доступа к переменной типа «main» внутри объекта Weather, если у меня уже есть «main» объект в массиве JSON?В этом отношении, как я могу получить доступ к любому из внутренних объектов, используя Retrofit?

Я сделал переменные все сериализуемыми, и экспериментировал, используя статические классы для объектов в массиве.

КакНапример, скажем, я хочу получить "id" в объекте "weather".Мой класс JSONResponse выглядит следующим образом:

public class JSONResponse {
@SerializedName("weather")
@Expose
private List<Weather> weather = null;
@SerializedName("main")
@Expose
private Main main;
@SerializedName("wind")
@Expose
private Wind wind;
@SerializedName("clouds")
@Expose
private Clouds clouds;
@SerializedName("sys")
@Expose
private Sys sys;
@SerializedName("name")
@Expose
private String name;

//getter and setter methods
}

А мой класс Weather выглядит следующим образом: открытый класс Weather {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("main")
    @Expose
    //This describes what the weather is like, e.g. clear or cloudy
    private String main;
    @SerializedName("description")
    @Expose
    private String description;
    @SerializedName("icon")
    @Expose
    private String icon;

    public Integer getId() {
        return id;
    }

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

    public String getMain() {
        return main;
    }

    public void setMain(String main) {
        this.main = main;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

}

Как мне получить эти данные, используя Retrofit в моей основной деятельности?Буду ли я лучше использовать RXJava без модернизации?Если так, как я могу сделать это?Заранее спасибо всем, у кого есть терпение ответить на этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...