Android Retrofit - 如何解析 Github Emojis API

Posted

技术标签:

【中文标题】Android Retrofit - 如何解析 Github Emojis API【英文标题】:Android Retrofit - How to parse Github Emojis API 【发布时间】:2021-06-20 16:38:26 【问题描述】:

请查看此 api:https://api.github.com/emojis

这是响应的一部分:


  "+1": "https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8",
  "-1": "https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8",
  "100": "https://github.githubassets.com/images/icons/emoji/unicode/1f4af.png?v8",
  "1234": "https://github.githubassets.com/images/icons/emoji/unicode/1f522.png?v8",
  "1st_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f947.png?v8",
  "2nd_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f948.png?v8",
  "3rd_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f949.png?v8",
  "8ball": "https://github.githubassets.com/images/icons/emoji/unicode/1f3b1.png?v8",
  "a": "https://github.githubassets.com/images/icons/emoji/unicode/1f170.png?v8",
  "ab": "https://github.githubassets.com/images/icons/emoji/unicode/1f18e.png?v8",
  "abacus": "https://github.githubassets.com/images/icons/emoji/unicode/1f9ee.png?v8",
  "abc": "https://github.githubassets.com/images/icons/emoji/unicode/1f524.png?v8",
  "abcd": "https://github.githubassets.com/images/icons/emoji/unicode/1f521.png?v8",

我想将此响应转换为表情符号列表。

data class Emoji(
    val name: String,
    val url: String,
)

请注意,响应是一个大对象,我需要一个列表。

这就是我实例化改造的方式:

val retrofit = Retrofit.Builder()
        .baseUrl(BuildConfig.BASE_URL)
        .addConverterFactory(MoshiConverterFactory.create())
        .build()

我怎样才能实现它?

【问题讨论】:

【参考方案1】:

您没有附加 Api 接口,但根据您的描述,您已将 List<Emoji> 放入您的 api 接口中,这将引发 MalformedJSONException

请改用Map<String, String>,如果您需要列表,请使用responseMap.map Emoji(it.key, it.valie)

【讨论】:

我忘记将我的 Api 附加到问题中的改造。有效!谢谢!

以上是关于Android Retrofit - 如何解析 Github Emojis API的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Retrofit 解析 json

Android Retrofit框架解析

Android网络编程源码解析Retrofit

Android 网络框架之Retrofit2使用详解及从源码中解析原理

android之Retrofit使用

Android Kotlin Retrofit + SimpleXMLConverter ElementList 解析不正确