Я пытаюсь использовать retrofit библиотеку, чтобы сделать запросы API к Riot API и пример запроса возвращает JSON, который выглядит следующим образом:Как сделать дооснащения класс
{"dyrus":{"id":5908,"name":"Dyrus","profileIconId":752,"summonerLevel":30,"revisionDate":1431126576000}}
Обратите внимание на объект dyrus
имеет несколько суб свойства, и я хочу получить свойство id. Проблема, с которой я сталкиваюсь, - это не просто поиск идентификатора для dyrus
, но и для других игроков. Когда я смотрю на других игроков, имя объекта меняется в зависимости от имени, которое я ищу. Например вот другой пример запроса:
{"theoddone":{"id":60783,"name":"TheOddOne","profileIconId":752,"summonerLevel":30,"revisionDate":1431327360000}}
theoddone
теперь имя объекта. Как создать класс переопределения, который динамически изменяет имя объекта в зависимости от человека, которого ищут. Или как мне получить доступ к свойству id? Мой класс выглядит это прямо сейчас, но не работает:
public class Summoner {
private int id;
private String name;
private int profileIconId;
private int summonerLevel;
private int revisionDate;
/**
*
* @return
* The id
*/
public int getId() {
return id;
}
/**
*
* @param id
* The id
*/
public void setId(int id) {
this.id = id;
}
/**
*
* @return
* The name
*/
public String getName() {
return name;
}
/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @return
* The profileIconId
*/
public int getProfileIconId() {
return profileIconId;
}
/**
*
* @param profileIconId
* The profileIconId
*/
public void setProfileIconId(int profileIconId) {
this.profileIconId = profileIconId;
}
/**
*
* @return
* The summonerLevel
*/
public int getSummonerLevel() {
return summonerLevel;
}
/**
*
* @param summonerLevel
* The summonerLevel
*/
public void setSummonerLevel(int summonerLevel) {
this.summonerLevel = summonerLevel;
}
/**
*
* @return
* The revisionDate
*/
public int getRevisionDate() {
return revisionDate;
}
/**
*
* @param revisionDate
* The revisionDate
*/
public void setRevisionDate(int revisionDate) {
this.revisionDate = revisionDate;
}
}
Позволь мне знать, если вы хотите увидеть какую-либо другую часть, как я использую переоснащение. Заранее спасибо.
Интерфейс:
public interface SummonerId {
@GET("/api/lol/{region}/v1.4/summoner/by-name/{summonerName}")
void summoner(
@Path("region") String region,
@Path("summonerName") String summonerName,
@Query("api_key") String apiKey,
Callback<Summoner> cb
);
}
код в OnCreate метод моей деятельности:
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint("https://na.api.pvp.net")
.build();
SummonerId service = restAdapter.create(SummonerId.class);
service.summoner("na", "dyrus", "MY API KEY", new Callback<Summoner>() {
@Override
public void success(Summoner summoner, Response response) {
//summoner.getId() == null
}
@Override
public void failure(RetrofitError error) {
}
});
Когда я запускаю код успешно соединяется с сервером и получает право JSON, но не правильно поместите его в класс.
Похоже, вы не получаете «Summoner», а что-то вроде «SommonerWrapper» с переменной типа «Summoner», названной в соответствии с summoner. Это имя переменной похоже на большую икоту. Вам понадобится пользовательский TypeAdapter от Gson. –