API 请求 | OkHttp |通过 okhttp 请求两个对象的 api 请求

Posted

技术标签:

【中文标题】API 请求 | OkHttp |通过 okhttp 请求两个对象的 api 请求【英文标题】:API Request | OkHttp | api request via okhttp with two objects 【发布时间】:2020-06-21 18:01:19 【问题描述】:

我是 API Networking 的新手,所以这里有一个关于它的问题。

有史以来最好的开始,但我的代码太多...

我要解析的json文件:


   "id":"541.23",
   "username":"exampleUser",
   "links":
      "TWITTER":null,
      "YOUTUBE":"https://www.youtube.com/user/exampleUser"
      "INSTAGRAM":null,
      "TWITCH":null,
      "MIXER":"https://mixer.com/user/"
      "DISCORD":"DiscordUser#4576"
   

因为这段代码使用了okhttp和gson:

class MainActivity : AppCompatActivity() 
    lateinit var playerStats: PlayerStats

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        fun fetchJsonGeneral() 
            val url = "https://my.json.org/json
            val request = Request.Builder().url(url).build()
            val client = OkHttpClient()
            client.newCall(request).enqueue(object : Callback 
                var mainHandler = Handler(this@MainActivity.getMainLooper())
                override fun onResponse(call: Call, response: Response) 
                    mainHandler.post 
                        val body = response.body?.string()
                        if (body == null) return@post
                        println("Body:$body")

                        val gson = GsonBuilder().create()
                        playerStats = gson.fromJson(body, PlayerStats::class.java)

                        println("PlayerStats: $playerStats")
                        textView2.text = playerStats.username



                override fun onFailure(call: Call, e: IOException) 
                    println("API execute failed")
                
            )
        

和我的解析类:

class PlayerStats(val username: String  ,
                  val id: Double ,
                  val rank: String ,
                  val online: Boolean)

现在我想解析对象“链接”。我现在该怎么办?

【问题讨论】:

【参考方案1】:

你需要创建另一个类,比如

data class PlayerStatsLinks(val TWITTER:String?,
 val YOUTUBE:String?,
 val INSTAGRAM:String?,
 val TWITCH:String?,
 val MIXER:String?,
 val DISCORD:String?)

并更新你PlayerStats

class PlayerStats(val username: String  ,
              val id: Double ,
              val rank: String ,
              val online: Boolean,
              val links: PlayerStatsLinks)

【讨论】:

以上是关于API 请求 | OkHttp |通过 okhttp 请求两个对象的 api 请求的主要内容,如果未能解决你的问题,请参考以下文章

API 请求 | OkHttp |通过 okhttp 请求两个对象的 api 请求

如何将 okhttp 库导入到 android studio?

如何让app不走系统代理?

如何让app不走系统代理?

OkHttp3 + retrofit2 封装

深入解析OkHttp3