Все
Я пытался ответить на любой вопрос, который нашел в stackoverflow, чтобы решить мою проблему с загрузкой некоторых данных из объекта json, который содержит сотни вложенных объектов. Для начала взгляните на объект Json ниже.
{
"code": 200,
"status": "Ok",
"copyright": "© 2020 MARVEL",
"attributionText": "Data provided by Marvel. © 2020 MARVEL",
"attributionHTML": "<a href=\"http://marvel.com\">Data provided by Marvel. © 2020 MARVEL</a>",
"etag": "89dc1af12d4d13c3a3625cbf7f5ff4dd2456de4e",
"data": {
"offset": 0,
"limit": 20,
"total": 1493,
"count": 20,
"results": [
{
"id": 1011334,
"name": "3-D Man",
"description": "",
"modified": "2014-04-29T14:18:17-0400",
"thumbnail": {
"path": "http://i.annihil.us/u/prod/marvel/i/mg/c/e0/535fecbbb9784",
"extension": "jpg"
},
"resourceURI": "http://gateway.marvel.com/v1/public/characters/1011334",
"comics": {
"available": 12,
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1011334/comics",
"items": [
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/21366",
"name": "Avengers: The Initiative (2007) #14"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/24571",
"name": "Avengers: The Initiative (2007) #14 (SPOTLIGHT VARIANT)"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/21546",
"name": "Avengers: The Initiative (2007) #15"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/21741",
"name": "Avengers: The Initiative (2007) #16"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/21975",
"name": "Avengers: The Initiative (2007) #17"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/22299",
"name": "Avengers: The Initiative (2007) #18"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/22300",
"name": "Avengers: The Initiative (2007) #18 (ZOMBIE VARIANT)"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/22506",
"name": "Avengers: The Initiative (2007) #19"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/8500",
"name": "Deadpool (1997) #44"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/10223",
"name": "Marvel Premiere (1972) #35"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/10224",
"name": "Marvel Premiere (1972) #36"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/comics/10225",
"name": "Marvel Premiere (1972) #37"
}
],
"returned": 12
},
"series": {
"available": 3,
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1011334/series",
"items": [
{
"resourceURI": "http://gateway.marvel.com/v1/public/series/1945",
"name": "Avengers: The Initiative (2007 - 2010)"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/series/2005",
"name": "Deadpool (1997 - 2002)"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/series/2045",
"name": "Marvel Premiere (1972 - 1981)"
}
],
"returned": 3
},
"stories": {
"available": 21,
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1011334/stories",
"items": [
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19947",
"name": "Cover #19947",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19948",
"name": "The 3-D Man!",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19949",
"name": "Cover #19949",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19950",
"name": "The Devil's Music!",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19951",
"name": "Cover #19951",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/19952",
"name": "Code-Name: The Cold Warrior!",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47184",
"name": "AVENGERS: THE INITIATIVE (2007) #14",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47185",
"name": "Avengers: The Initiative (2007) #14 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47498",
"name": "AVENGERS: THE INITIATIVE (2007) #15",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47499",
"name": "Avengers: The Initiative (2007) #15 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47792",
"name": "AVENGERS: THE INITIATIVE (2007) #16",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/47793",
"name": "Avengers: The Initiative (2007) #16 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/48361",
"name": "AVENGERS: THE INITIATIVE (2007) #17",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/48362",
"name": "Avengers: The Initiative (2007) #17 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/49103",
"name": "AVENGERS: THE INITIATIVE (2007) #18",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/49104",
"name": "Avengers: The Initiative (2007) #18 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/49106",
"name": "Avengers: The Initiative (2007) #18, Zombie Variant - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/49888",
"name": "AVENGERS: THE INITIATIVE (2007) #19",
"type": "cover"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/49889",
"name": "Avengers: The Initiative (2007) #19 - Int",
"type": "interiorStory"
},
{
"resourceURI": "http://gateway.marvel.com/v1/public/stories/54371",
"name": "Avengers: The Initiative (2007) #14, Spotlight Variant - Int",
"type": "interiorStory"
}
],
"returned": 20
},
"events": {
"available": 1,
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1011334/events",
"items": [
{
"resourceURI": "http://gateway.marvel.com/v1/public/events/269",
"name": "Secret Invasion"
}
],
"returned": 1
},
"urls": [
{
"type": "detail",
"url": "http://marvel.com/comics/characters/1011334/3-d_man?utm_campaign=apiRef&utm_source=340d313cb4b165057bcfc54c7babd91e"
},
{
"type": "wiki",
"url": "http://marvel.com/universe/3-D_Man_(Chandler)?utm_campaign=apiRef&utm_source=340d313cb4b165057bcfc54c7babd91e"
},
{
"type": "comiclink",
"url": "http://marvel.com/comics/characters/1011334/3-d_man?utm_campaign=apiRef&utm_source=340d313cb4b165057bcfc54c7babd91e"
}
]
},
]
}
}
Мне просто нужны некоторые данные из этого json, такие как идентификатор, имя, описание и путь, который внутри другого объекта. Они находятся в массиве, который называется «result».
Я работаю над android проектом с kotlin
Вот мои классы данных
data class Character(var id: String,var name: String,var description: String,var path:tring)
data class CharacterResult(var characters: List<Character>)
Класс Character будет содержать все эти атрибуты, а CharacterResult будет иметь список Character.
Это мой интерфейс
интерфейс CharacterService {
@GET("/v1/public/characters")
fun getCharacters(@QueryMap params:Map<String,String>) : Call<CharacterResult>
}
Это мой сервис
класса ServiceBuilder {
companion object Factory {
var url: String = "https://gateway.marvel.com";
fun <S> buildService(clazz: Class<S>) : S {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(url)
.build()
return retrofit.create(clazz);
}
}
}
А вот MainActivity, который соберет все эти вещи вместе, чтобы получить результаты
class MainActivity: AppCompatActivity () {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
var task: CharacterService = ServiceBuilder.buildService(CharacterService::class.java)
var map = mapOf("my params") the params were passed fine don't worry abou that.
var call: Call<CharacterResult> = task.getCharacters(map);
call.enqueue(CallBackImpl())
}
class CallBackImpl() : Callback<CharacterResult> {
var debug: String = "TAG"
override fun onFailure(call: Call<CharacterResult>, t: Throwable) {
var result = call.request().body().toString();
Log.d(debug,result)
}
override fun onResponse(call: Call<CharacterResult>, response: response<CharacterResult>) {
if(response.isSuccessful){
var c = response.body();
print(c);
}
}
}
Ответ в порядке, что означает, что был вызван onResponse, но список символов пуст. API Gson не загружал объекты. Я что-то пропустил ? Может ли кто-нибудь сказать мне, что я делаю не так? Я был бы очень рад. Большое спасибо за ваши усилия и время, чтобы ответить на этот вопрос.