Загрузка некоторых данных из json с помощью retrofi - PullRequest
0 голосов
/ 10 февраля 2020

Все

Я пытался ответить на любой вопрос, который нашел в 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 не загружал объекты. Я что-то пропустил ? Может ли кто-нибудь сказать мне, что я делаю не так? Я был бы очень рад. Большое спасибо за ваши усилия и время, чтобы ответить на этот вопрос.

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