【okhttp与Gson】

1.使用okhttp

添加依赖:

compile 'com.squareup.okhttp3:okhttp:3.8.1'

导入gson

implementation 'com.google.code.gson:gson:2.2.4'

安装插件gsonformat返回json数据报时生成对应的提取类进行提取

  val result = response?.body()?.string()// 将返回的json报文通过string()方法转为字符串

再用gson的fromjson方法进行对应的类转换 并存入新对象 生成类内对应的list 重写tostring方法打印出结果就好了

kotlin没有静态 static 这个时候java混用的好处就出来了

 private fun loadDatas() {

        //4.1.1三行架构
      
        val client = OkHttpClient()
        val request = Request.Builder()
            .url("https://api.apiopen.top/musicRankingsDetails?type=1")
            .get()//get方法
            .build()

        //4.1.2传入队列与结果回调
        client.newCall(request).enqueue(object : Callback {

            //4.1.3回调实现两个方法 A
            override fun onFailure(call: Call, e: IOException) {

                myToast("获取数据失败")   //测试出现e.printStackTrace()

            }

            //4.1.3回调实现两个方法 B
            override fun onResponse(call: Call?, response: Response?) {


                myToast("获取数据成功")
                //4.14查看结果集  根据数据结果集来编写Bean类(model->HomeItemBean)
                val result = response?.body()?.string()//.body()公开获取响应的流  .string()得到字符串
                println("获取数据成功:" + result)
                println("获取线程名" + Thread.currentThread().name) //调试方法 发现是子线程调用 主线程会有main

                // 4.15 导包Gson
            val gson = Gson()
           
     
                val resultBean = gson.fromJson(result, HomeItemBeanSuccess::class.java!!)
//对象中拿到集合

                val userBeanList = resultBean.getResult()
                println("获取数据成功111:"+userBeanList.toString())//查看结果size 返回条目*/
            }
        })

    }

这是生成的数据类 

package com.ywjh.farawayplayer.model

class HomeItemBeanSuccess {

    private var code: Int = 0
    private var message: String? = null
    private var result: List<ResultBean>? = null  //result 结果集

    fun getCode(): Int {
        return code
    }

    fun setCode(code: Int) {
        this.code = code
    }

    fun getMessage(): String? {
        return message
    }

    fun setMessage(message: String) {
        this.message = message
    }

    fun getResult(): List<ResultBean>? {
        return result
    }

    fun setResult(result: List<ResultBean>) {
        this.result = result
    }

    class ResultBean {
        /**
         * country : 内地
         * piao_id : 0
         * res_encryption_flag : 0
         * mv_provider : 0000000000
         * biaoshi : lossless,perm-1
         * artist_name : 冷凡
         * is_first_publish : 0
         * language : 国语
         * album_1000_1000 : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg
         * korean_bb_song : 0
         * pic_huge : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg
         * all_rate : 96,128,224,320,flac
         * song_source : web
         * song_id : 672600384
         * album_500_500 : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_500,h_500
         * rank : 1
         * pic_premium : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_500,h_500
         * album_800_800 :
         * info :
         * area : 0
         * si_proxycompany : 北京万上文化传媒有限公司
         * has_mv_mobile : 0
         * is_new : 1
         * author : 冷凡
         * resource_type : 0
         * has_filmtv : 0
         * all_artist_ting_uid : 340249647
         * artist_id : 559712946
         * versions :
         * publishtime : 2019-12-02
         * style :
         * album_id : 672600382
         * album_no : 1
         * resource_type_ext : 0
         * del_status : 0
         * hot : 18730
         * toneid : 0
         * title : 酒醉的蝴蝶
         * pic_big : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_150,h_150
         * relate_status : 0
         * rank_change : 3
         * lrclink : http://qukufile2.qianqian.com/data2/lrc/62e555298f8d641824a7e58f9991f0aa/672600419/672600419.txt
         * file_duration : 205
         * havehigh : 2
         * charge : 0
         * pic_radio : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_300,h_300
         * learn : 0
         * pic_s500 : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_500,h_500
         * all_artist_id : 559712946
         * pic_small : http://qukufile2.qianqian.com/data2/pic/55f472ef374d4e3af0b7935a9df9437f/672600403/672600403.jpg@s_2,w_90,h_90
         * bitrate_fee : {"0":"0|0","1":"0|0"}
         * has_mv : 0
         * copy_type : 1
         * ting_uid : 340249647
         * album_title : 酒醉的蝴蝶
         */

        var country: String? = null
        var piao_id: String? = null
        var res_encryption_flag: String? = null
        var mv_provider: String? = null
        var biaoshi: String? = null
        var artist_name: String? = null
        var is_first_publish: Int = 0
        var language: String? = null
        var album_1000_1000: String? = null
        var korean_bb_song: String? = null
        var pic_huge: String? = null
        var all_rate: String? = null
        var song_source: String? = null
        var song_id: String? = null
        var album_500_500: String? = null
        var rank: String? = null
        var pic_premium: String? = null
        var album_800_800: String? = null
        var info: String? = null
        var area: String? = null
        var si_proxycompany: String? = null
        var has_mv_mobile: Int = 0
        var is_new: String? = null
        var author: String? = null
        var resource_type: String? = null
        var has_filmtv: String? = null
        var all_artist_ting_uid: String? = null
        var artist_id: String? = null
        var versions: String? = null
        var publishtime: String? = null
        var style: String? = null
        var album_id: String? = null
        var album_no: String? = null
        var resource_type_ext: String? = null
        var del_status: String? = null
        var hot: String? = null
        var toneid: String? = null
        var title: String? = null
        var pic_big: String? = null
        var relate_status: String? = null
        var rank_change: String? = null
        var lrclink: String? = null
        var file_duration: Int = 0
        var havehigh: Int = 0
        var charge: Int = 0
        var pic_radio: String? = null
        var learn: Int = 0
        var pic_s500: String? = null
        var all_artist_id: String? = null
        var pic_small: String? = null
        var bitrate_fee: String? = null
        var has_mv: Int = 0
        var copy_type: String? = null
        var ting_uid: String? = null
        var album_title: String? = null
        override fun toString(): String {
            return "ResultBean(country=$country, piao_id=$piao_id, res_encryption_flag=$res_encryption_flag, mv_provider=$mv_provider, biaoshi=$biaoshi, artist_name=$artist_name, is_first_publish=$is_first_publish, language=$language, album_1000_1000=$album_1000_1000, korean_bb_song=$korean_bb_song, pic_huge=$pic_huge, all_rate=$all_rate, song_source=$song_source, song_id=$song_id, album_500_500=$album_500_500, rank=$rank, pic_premium=$pic_premium, album_800_800=$album_800_800, info=$info, area=$area, si_proxycompany=$si_proxycompany, has_mv_mobile=$has_mv_mobile, is_new=$is_new, author=$author, resource_type=$resource_type, has_filmtv=$has_filmtv, all_artist_ting_uid=$all_artist_ting_uid, artist_id=$artist_id, versions=$versions, publishtime=$publishtime, style=$style, album_id=$album_id, album_no=$album_no, resource_type_ext=$resource_type_ext, del_status=$del_status, hot=$hot, toneid=$toneid, title=$title, pic_big=$pic_big, relate_status=$relate_status, rank_change=$rank_change, lrclink=$lrclink, file_duration=$file_duration, havehigh=$havehigh, charge=$charge, pic_radio=$pic_radio, learn=$learn, pic_s500=$pic_s500, all_artist_id=$all_artist_id, pic_small=$pic_small, bitrate_fee=$bitrate_fee, has_mv=$has_mv, copy_type=$copy_type, ting_uid=$ting_uid, album_title=$album_title)"
        }
    }









}
//    /**
//     * code : 0
//     * msg : SUCCESS
//     * now : 1575866247681
//     * data : [{"type":"VIDEO","id":3395154,"title":"夜的尽头 官方版","description":"鹿晗","posterPic":"http://img3.c.yinyuetai.com/others/mobile_front_page/190903/0/-M-3786ad47009baa9a37142b8e0ede531a_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190903/0/-M-a81ae33b8e6a026706ff5ce51b0a6315_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/FF0E016CF4EEF23105AAF686F7CF7A87.mp4?sc=c7fca97c22eec76b&br=783&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/FF0E016CF4EEF23105AAF686F7CF7A87.mp4?sc=c7fca97c22eec76b&br=783&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/9916016CF4F5ECD8529154BC758F24EC.mp4?sc=40bae07535e4be72&br=1109&rd=Android","videoSize":21910587,"hdVideoSize":21910587,"uhdVideoSize":31003345,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6582"},{"type":"VIDEO","id":3393912,"title":"你好吗我很好谢谢你呢 官方版","description":"李宇春","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190823/0/-M-80db853bf9ccfd8c3a992dccc5281da0_0x0.png","thumbnailPic":"http://img1.c.yinyuetai.com/video/mv/190823/0/-M-ade44f0d8992cf14ffaf067485845401_240x135.png","url":"http://hc.yinyuetai.com/uploads/videos/common/682F016CBD95F23BF909B698F7CADB8B.mp4?sc=e8c2ad35d2b3ccaa&br=781&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/682F016CBD95F23BF909B698F7CADB8B.mp4?sc=e8c2ad35d2b3ccaa&br=781&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/9F33016CBDAF74D39722C9FD9CCF4672.mp4?sc=a1b0c48fc10bb36e&br=1102&rd=Android","videoSize":25819131,"hdVideoSize":25819131,"uhdVideoSize":36415355,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6581"},{"type":"VIDEO","id":3390796,"title":"这么久没见 官方版","description":"薛之谦","posterPic":"http://img3.c.yinyuetai.com/others/mobile_front_page/190806/0/-M-adf004698be56c3a54a59a6f49dc057d_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190806/0/f7b2ed98bacade981ef78cc5dbbd78e5_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/0073016C64EFD8A984A340ABC3B32EE8.mp4?sc=f54ce951b67de964&br=777&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/0073016C64EFD8A984A340ABC3B32EE8.mp4?sc=f54ce951b67de964&br=777&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/EAF4016C6511D08F8FD0F40900B15F1E.mp4?sc=f4024d3086c23a4e&br=1095&rd=Android","videoSize":28896393,"hdVideoSize":28896393,"uhdVideoSize":40708708,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6580"},{"type":"VIDEO","id":3389598,"title":"YOUNG 官方版","description":"蔡徐坤","posterPic":"http://img2.c.yinyuetai.com/others/mobile_front_page/190726/0/-M-8d221c596a827770b9067a1c0638dfc7_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190726/0/-M-a0ef3450c3d842add27d5b6c060c8615_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/AA13016C284D8957D34E83D629162E22.mp4?sc=2f492da8667f5604&br=782&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/AA13016C284D8957D34E83D629162E22.mp4?sc=2f492da8667f5604&br=782&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/DC96016C2BFCBF39B62D9536F061237D.mp4?sc=ac8c9d6024c6ae53&br=1101&rd=Android","videoSize":23282312,"hdVideoSize":23282312,"uhdVideoSize":32789703,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6579"},{"type":"VIDEO","id":3389109,"title":"慢半拍 官方版","description":"薛之谦","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190719/0/-M-0d7b3644a3d19dab4641d77ff443ab54_0x0.jpg","thumbnailPic":"http://img1.c.yinyuetai.com/video/mv/190719/0/-M-a447b724054a1aa1da88b90f25e3a67d_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/E063016C084095C4383D3C62027F7E18.mp4?sc=57943ef7974fbe17&br=785&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/E063016C084095C4383D3C62027F7E18.mp4?sc=57943ef7974fbe17&br=785&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/FB24016C086394B949600A4B5EEBD1C3.mp4?sc=18a47fecb406e80c&br=1110&rd=Android","videoSize":26949148,"hdVideoSize":26949148,"uhdVideoSize":38085415,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6578"},{"type":"VIDEO","id":3386048,"title":"我们很好  电影《少年的你》主题曲","description":"林俊杰","posterPic":"http://img2.c.yinyuetai.com/others/mobile_front_page/190614/0/-M-a3ccf9462e5c3bbcc0875d555fc8ef65_0x0.jpg","thumbnailPic":"http://img0.c.yinyuetai.com/video/mv/190613/0/-M-dc4ba4f0e70f153f2975b6e575f91289_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/77D0016B51007FAA1A54BAAF486A9E9E.mp4?sc=20069a2efedee274&br=793&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/77D0016B51007FAA1A54BAAF486A9E9E.mp4?sc=20069a2efedee274&br=793&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/84C8016B51223CCDDB6B65E864619698.mp4?sc=445975b41322da94&br=1120&rd=Android","videoSize":28933353,"hdVideoSize":28933353,"uhdVideoSize":40868808,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6575"},{"type":"PROGRAM","subType":"VIDEO","id":3385413,"title":"爱豆企划社EP44 AKO王喆面试记","description":"爱豆企划社","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190605/0/-M-09fee739304c615f72fb01ddcd938e88_0x0.jpg","thumbnailPic":"http://img2.c.yinyuetai.com/video/mv/190605/0/-M-73fbf8626235034991f7298748ce1848_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/CC1B016B26ED3E42358A01D01C4353A6.mp4?sc=ea481f8d36680a66&br=779&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/CC1B016B26ED3E42358A01D01C4353A6.mp4?sc=ea481f8d36680a66&br=779&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/6C9F016B26F9875D2E092AC209D0B334.mp4?sc=7f966a88b925d0bb&br=1100&rd=Android","videoSize":76274200,"hdVideoSize":76274200,"uhdVideoSize":107657901,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6574"},{"type":"PROGRAM","subType":"VIDEO","id":3385300,"title":"品▪Rapper▪冠使用手册-品冠专访","description":"品冠 & STAR!调查团","posterPic":"http://img2.c.yinyuetai.com/others/mobile_front_page/190604/0/-M-4ad8a89199a3b4777a68f4c6ecbfc27b_0x0.jpg","thumbnailPic":"http://img2.c.yinyuetai.com/video/mv/190604/0/-M-ea163ed793671dc18e317f65b6479502_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/E8C7016B20956742AD91F7D3D06B5CEE.mp4?sc=942f9f8decaec17e&br=783&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/E8C7016B20956742AD91F7D3D06B5CEE.mp4?sc=942f9f8decaec17e&br=783&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/0537016B21EFC918B99F35C711330E58.mp4?sc=d123a6537be78c3d&br=1104&rd=Android","videoSize":42817323,"hdVideoSize":42817323,"uhdVideoSize":60330228,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6573"},{"type":"PROGRAM","subType":"VIDEO","id":3385103,"title":"V榜TOP10 2019 第二十二期 蔡徐坤&飞儿乐团&Justin Bieber&咸慇晶&早安少女组","description":"音悦V榜 & 蔡徐坤 & 飞儿乐团 & Justin Bieber & 咸慇晶(T-ara)","posterPic":"http://img2.c.yinyuetai.com/others/mobile_front_page/190603/0/-M-9e2151c172a5557c5840e9d566c4be01_0x0.jpg","thumbnailPic":"http://img1.c.yinyuetai.com/video/mv/190603/0/-M-3f0166c468c0a3364a1d2d6de5ea113c_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/A693016B1CCEA37CCBAB1D9CF473CD61.mp4?sc=65bcbda6c9a80120&br=785&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/A693016B1CCEA37CCBAB1D9CF473CD61.mp4?sc=65bcbda6c9a80120&br=785&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/752B016B1CD522DD06F1243EA0F0485E.mp4?sc=0afa1296be129987&br=1106&rd=Android","videoSize":88406651,"hdVideoSize":88406651,"uhdVideoSize":124547467,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6572"},{"type":"PROGRAM","subType":"VIDEO","id":3384804,"title":"爱豆企划社EP43 Black ACE超FREE面试记","description":"爱豆企划社","posterPic":"http://img3.c.yinyuetai.com/others/mobile_front_page/190531/0/-M-b88a1b92b29c9b81a24f8a7683c2287e_0x0.jpg","thumbnailPic":"http://img0.c.yinyuetai.com/video/mv/190531/0/-M-c5ac1d0c1863966a561957e484b05272_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/0E4D016B1BC63CBC13E534E70B185CA2.mp4?sc=2b03903817c7c28a&br=785&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/0E4D016B1BC63CBC13E534E70B185CA2.mp4?sc=2b03903817c7c28a&br=785&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/0E8A016B1BD9511523D175E5DD062961.mp4?sc=d04f10110f9a3376&br=1101&rd=Android","videoSize":157616516,"hdVideoSize":157616516,"uhdVideoSize":221105658,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6571"},{"type":"PROGRAM","subType":"VIDEO","id":3384235,"title":"V榜TOP10 2019 第二十一期 蔡徐坤&蔡依林&TaylorSwift&赤西仁&咸慇晶","description":"音悦V榜 & 蔡徐坤 & Taylor Swift & 蔡依林 & 咸慇晶(T-ara) & 赤西仁","posterPic":"http://img3.c.yinyuetai.com/others/mobile_front_page/190527/0/-M-2b4ff686a5a7edddfae52d575f770961_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190527/0/-M-69071f70fa7374c06593786c6e51c5d7_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/7242016AF8A4F48652A9ADE414962F34.mp4?sc=0c008e5b84155a89&br=785&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/7242016AF8A4F48652A9ADE414962F34.mp4?sc=0c008e5b84155a89&br=785&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/FC69016AF8AECB9D72458964910F92B2.mp4?sc=e0d2be416ba55b70&br=1108&rd=Android","videoSize":88355978,"hdVideoSize":88355978,"uhdVideoSize":124681342,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6570"},{"type":"VIDEO","id":3384215,"title":"造梦者","description":"飞儿乐团","posterPic":"http://img4.c.yinyuetai.com/others/mobile_front_page/190527/0/-M-49cb8e75549a2ff1980e787ee4d32128_0x0.jpg","thumbnailPic":"http://img2.c.yinyuetai.com/video/mv/190527/0/-M-244345846f90ba49d748d6172e07b2f1_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/B0E0016AF7F774A01341401EA4E7EFA0.mp4?sc=494cdc5f86998e27&br=778&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/B0E0016AF7F774A01341401EA4E7EFA0.mp4?sc=494cdc5f86998e27&br=778&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/D1C6016AF801FC17611CA853D9BEC885.mp4?sc=6f427634580e253c&br=1096&rd=Android","videoSize":20700370,"hdVideoSize":20700370,"uhdVideoSize":29156246,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6569"},{"type":"PROGRAM","subType":"VIDEO","id":3383936,"title":"郁可唯:一个被歌唱事业耽误的\u201c电竞女神\u201d","description":"郁可唯 & STAR!调查团","posterPic":"http://img4.c.yinyuetai.com/others/mobile_front_page/190524/0/-M-558f0cdb32824d5bd8863fb738c6ea89_0x0.jpg","thumbnailPic":"http://img0.c.yinyuetai.com/video/mv/190524/0/-M-0121e681bc04ecd4f4a21c5996157fcc_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/296F016AE45FBCAD75FA14F0562A7499.mp4?sc=1858d9ea7db545b6&br=784&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/296F016AE45FBCAD75FA14F0562A7499.mp4?sc=1858d9ea7db545b6&br=784&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/2952016AE94451AF8DD7AE2812F1FCB7.mp4?sc=5e441ed3be393513&br=1106&rd=Android","videoSize":49240682,"hdVideoSize":49240682,"uhdVideoSize":69462112,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6568"},{"type":"PROGRAM","subType":"VIDEO","id":3383373,"title":"V榜TOP10 2019 第二十期 蔡徐坤&蔡依林&TaylorSwift&赤西仁&EXID","description":"音悦V榜 & 蔡徐坤 & Taylor Swift & 蔡依林 & 赤西仁 & EXID","posterPic":"http://img4.c.yinyuetai.com/others/mobile_front_page/190520/0/-M-dbef248addca01fbbce26c9ffc8cf047_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190520/0/-M-47379c263d99e729cf65d20182a1648a_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/FE14016AD4BA8903F4F0CD8469A062A8.mp4?sc=53ec8cbc1dded22a&br=784&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/FE14016AD4BA8903F4F0CD8469A062A8.mp4?sc=53ec8cbc1dded22a&br=784&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/C3D4016AD4D3255D15A1A7889E1902A4.mp4?sc=98f9061e67236b1f&br=1105&rd=Android","videoSize":88213806,"hdVideoSize":88213806,"uhdVideoSize":124396468,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6567"},{"type":"VIDEO","id":3383354,"title":"ECLIPSE","description":"GOT7","posterPic":"http://img3.c.yinyuetai.com/others/mobile_front_page/190520/0/-M-f1b0a2ab3910a5b39905f9925475f466_0x0.jpg","thumbnailPic":"http://img2.c.yinyuetai.com/video/mv/190520/0/64c8b95dd8aee4db1f92ab1dca039aa3_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/DD0E016AD4818999253E52B8C0C37314.mp4?sc=cc51db167d895afd&br=786&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/DD0E016AD4818999253E52B8C0C37314.mp4?sc=cc51db167d895afd&br=786&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/9E5E016AD48DD2C90346295E48527505.mp4?sc=118a4bc98ca206bf&br=1098&rd=Android","videoSize":22302529,"hdVideoSize":22302529,"uhdVideoSize":31123899,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6566"},{"type":"PROGRAM","subType":"VIDEO","id":3383122,"title":"爱豆企划社EP42 沙漠五子D5面试记 上","description":"爱豆企划社","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190517/0/-M-b51484e89b8480ab6806ab9ead59d2c3_0x0.jpg","thumbnailPic":"http://img4.c.yinyuetai.com/video/mv/190517/0/-M-46a5e8f7039e98ec626c5689123aff31_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/6E26016AC53894CDEA8D3383B54D1E6D.mp4?sc=6608b9fcdeb676f9&br=773&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/6E26016AC53894CDEA8D3383B54D1E6D.mp4?sc=6608b9fcdeb676f9&br=773&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/1965016AC53D49DC12A02BD06621AC04.mp4?sc=9ffaff7786100165&br=1099&rd=Android","videoSize":121626430,"hdVideoSize":121626430,"uhdVideoSize":172885408,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6565"},{"type":"VIDEO","id":3382803,"title":"顽固 LIVE版 MV","description":"五月天 & 梁家辉","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190517/0/-M-d802fcedec543e37c126947e024eb22d_0x0.jpg","thumbnailPic":"http://img0.c.yinyuetai.com/video/mv/190515/0/-M-5805fbe865bd9f4e78e521641127b718_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/9465016ABAC2FA238FE32A84B0C319F3.mp4?sc=1ec62a8ea85d95a1&br=780&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/9465016ABAC2FA238FE32A84B0C319F3.mp4?sc=1ec62a8ea85d95a1&br=780&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/81D5016ABAD40FAF686D175C05150DC4.mp4?sc=5c0657a84532b90a&br=1101&rd=Android","videoSize":27706735,"hdVideoSize":27706735,"uhdVideoSize":39137649,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6564"},{"type":"VIDEO","id":3382957,"title":"\u201c火箭少女101\u201d 孟美岐 使用手册","description":"STAR!调查团 & 孟美岐(火箭少女101) & 火箭少女101","posterPic":"http://img1.c.yinyuetai.com/others/mobile_front_page/190516/0/-M-dab6c1d89a942ba5eddc4c6d803f8d8c_0x0.jpg","thumbnailPic":"http://img3.c.yinyuetai.com/video/mv/190516/0/-M-6e846bb4350d360b06bab58e69e46e47_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/CC81016ABFC550EB2B48A257EA6592F8.mp4?sc=1dd7eb246fb5add3&br=778&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/CC81016ABFC550EB2B48A257EA6592F8.mp4?sc=1dd7eb246fb5add3&br=778&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/7DB0016AC00B8C35F61142EFAA9A3B0A.mp4?sc=877c8c34bc7169c6&br=1096&rd=Android","videoSize":48092325,"hdVideoSize":48092325,"uhdVideoSize":67766960,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6563"},{"type":"VIDEO","id":3382595,"title":"体会(Nature)","description":"鹿晗","posterPic":"http://img4.c.yinyuetai.com/others/mobile_front_page/190515/0/-M-a49f97410d4f2cbf0e3d78fe9dae10af_0x0.jpg","thumbnailPic":"http://img3.c.yinyuetai.com/video/mv/190514/0/-M-c0da6ff8e48c66cff004afe5e366ea09_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/AB77016AB4E200F9D8FA7F334B07CC14.mp4?sc=1402ac86a49e0ef5&br=777&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/AB77016AB4E200F9D8FA7F334B07CC14.mp4?sc=1402ac86a49e0ef5&br=777&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/7A13016AB4E638F88F4A0D23618F56F1.mp4?sc=896eaa7d474f0fe0&br=1095&rd=Android","videoSize":21978316,"hdVideoSize":21978316,"uhdVideoSize":30966074,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6562"},{"type":"PROGRAM","subType":"VIDEO","id":3382637,"title":"跟着威神V一起冲上云霄吧 - 威神V专访","description":"STAR!调查团 & 威神V","posterPic":"http://img0.c.yinyuetai.com/others/mobile_front_page/190514/0/-M-d5217dc8cd63033d8595548bbd367296_0x0.jpg","thumbnailPic":"http://img2.c.yinyuetai.com/video/mv/190514/0/-M-ab519f582cd48b78902c0585dd3ac4b8_240x135.jpg","url":"http://hc.yinyuetai.com/uploads/videos/common/746A016AB4D2ACC9A8A882D0EB0DD7D6.mp4?sc=df9a82e049a5112f&br=779&rd=Android","hdUrl":"http://hc.yinyuetai.com/uploads/videos/common/746A016AB4D2ACC9A8A882D0EB0DD7D6.mp4?sc=df9a82e049a5112f&br=779&rd=Android","uhdUrl":"http://hd.yinyuetai.com/uploads/videos/common/331F016AB5CB83280C479EAC4B48BCD9.mp4?sc=f4cd085daaee47e6&br=1099&rd=Android","videoSize":74924958,"hdVideoSize":74924958,"uhdVideoSize":105642177,"status":200,"clickUrl":"https://mapiv2.yinyuetai.com/statistics/click.json?id=6561"}]
//     * cost : 1487
//     */
//
//    var code: String? = null
//    var msg: String? = null
//    var now: Long = 0
//    var cost: Int = 0
//    var data: List<DataBean>? = null
//
//    class DataBean {
//        /**
//         * type : VIDEO
//         * id : 3395154
//         * title : 夜的尽头 官方版
//         * description : 鹿晗
//         * posterPic : http://img3.c.yinyuetai.com/others/mobile_front_page/190903/0/-M-3786ad47009baa9a37142b8e0ede531a_0x0.jpg
//         * thumbnailPic : http://img4.c.yinyuetai.com/video/mv/190903/0/-M-a81ae33b8e6a026706ff5ce51b0a6315_240x135.jpg
//         * url : http://hc.yinyuetai.com/uploads/videos/common/FF0E016CF4EEF23105AAF686F7CF7A87.mp4?sc=c7fca97c22eec76b&br=783&rd=Android
//         * hdUrl : http://hc.yinyuetai.com/uploads/videos/common/FF0E016CF4EEF23105AAF686F7CF7A87.mp4?sc=c7fca97c22eec76b&br=783&rd=Android
//         * uhdUrl : http://hd.yinyuetai.com/uploads/videos/common/9916016CF4F5ECD8529154BC758F24EC.mp4?sc=40bae07535e4be72&br=1109&rd=Android
//         * videoSize : 21910587
//         * hdVideoSize : 21910587
//         * uhdVideoSize : 31003345
//         * status : 200
//         * clickUrl : https://mapiv2.yinyuetai.com/statistics/click.json?id=6582
//         * subType : VIDEO
//         */
//
//        var type: String? = null
//        var id: Int = 0
//        var title: String? = null
//        var description: String? = null
//        var posterPic: String? = null
//        var thumbnailPic: String? = null
//        var url: String? = null
//        var hdUrl: String? = null
//        var uhdUrl: String? = null
//        var videoSize: Int = 0
//        var hdVideoSize: Int = 0
//        var uhdVideoSize: Int = 0
//        var status: Int = 0
//        var clickUrl: String? = null
//        var subType: String? = null
//    }
//}

//result 是返回的数据(string类型) 
//传一个泛型List<> 打开一下(传一个json srting,传一个type用TypenToken, )  固定写法...{}打开一下TypeToken<List<HomeItemBean>>{}.type报错 因为传的是一个匿名内部类 转一下object就好了
 

val list=gson.fromJson<List<HomeItemBeanSuccess>>(result,object TypeToken<List<HomeItemBean>>{}.gettype)
   println("获取数据成功:"+list.size)//查看结果size 返回条目*/

TypeToken的使用非常简单,如上面的代码,只要将需要获取类型的泛型类作为TypeToken的泛型参数构造一个匿名的子类,就可以通过getType()方法获取到我们使用的泛型类的泛型参数类型。

Gson包进行Json和Java对象之间的转化,普通类用原来的写法就好了,一个json返回的字符串类型,再将类传入就好了

对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持

对于上面的类Foo<T>,由于在运行期间无法得知T的具体类型,对这个类的对象进行序列化和反序列化都不能正常进行。Gson通过借助TypeToken类来解决这个问题。

https://www.cnblogs.com/reboost/p/9521711.html

感谢这位dalao解决了我在获取返回格式上的疑惑

Gson fromJson() 用法

1.纯数组JSON

字符串转换

[ {"name": "zhangsan","age": "10","phone": "11111","email": "[email protected]"},

 {"name": "lisi","age": "20","phone": "22222","email": "[email protected]"},

  ...]

解析代码如下:

public class UserBean {

    //变量名跟JSON数据字段名必须一致

    private String name ;

    private String age;

    private String phone;

    private String email;

    ...

}

 //拿到本地JSON 并转成String

 String strByJson = ConstructTestJsonStr();//此处函数内容省略

 //Json的解析类对象

 JsonParser parser = new JsonParser();

 //将JSON的String 转成一个JsonArray对象

 JsonArray jsonArray = parser.parse(strByJson).getAsJsonArray();

 Gson gson = new Gson();

 ArrayList<UserBean> userBeanList = new ArrayList<>();

 //加强for循环遍历JsonArray

 for (JsonElement user : jsonArray) {

        //使用GSON,直接转成Bean对象

        UserBean userBean = gson.fromJson(user, UserBean.class);

        userBeanList.add(userBean);

 }

2.有数据头的纯数组

数据转换

{"muser": [{"name": "zhangsan","age": "10","phone": "11111","email": "[email protected]"},
           {"name": "lisi","age": "20","phone": "22222","email": "[email protected]"},

           ...]
}

//解析有数据头的纯数组

//拿到本地JSON 并转成String

String strByJson = ConstructTestJsonStr();//此处函数内容省略;

//先转JsonObject

JsonObject jsonObject = new JsonParser().parse(strByJson).getAsJsonObject();

//再转JsonArray 加上数据头

JsonArray jsonArray = jsonObject.getAsJsonArray("muser");

Gson gson = new Gson();

ArrayList<UserBean> userBeanList = new ArrayList<>();

//循环遍历

for (JsonElement user : jsonArray) {

        //通过反射 得到UserBean.class

        UserBean userBean = gson.fromJson(user, new TypeToken<UserBean>() {}.getType());

        userBeanList.add(userBean);

}

3.有数据头的复杂

数据转换

{ "code": 200,"msg": "OK",
 "muser": [{"name": "zhangsan","age": "10","phone": "11111","email":"[email protected]"},
           {"name": "lisi","age": "20","phone": "22222","email": "[email protected]"},
           ...]
}

 被解析对象不是纯数组数据,还有其它字段+数组(含头),方法如下:

 根据 JSON 建立Bean,注意这里的 Bean 是返回所有字段,因为 GSON 能直接解析成 List ,所以 Bean 是下面这样的,同样把占地方的get/set省略:

public class ResultBean {
    //注意变量名与字段名必须一致
    private int code;
    private String msg;
    private List<UserBean> muser;
    public class UserBean{
        private String name ;
        private String age;
        private String phone;
        private String email;
        ...
    }
    ...
}
//有消息头 复杂数据 常规方式 方法如下
//拿到Json字符串
String strByJson =  ConstructTestJsonStr();//此处函数内容省略;
//GSON直接解析成对象
ResultBean resultBean = new Gson().fromJson(strByJson,ResultBean.class);
//对象中拿到集合
List<ResultBean.UserBean> userBeanList = resultBean.getMuser();
三句话搞定,由此看出GSON的强大

4.只解析复杂JSON中的

数组或数组中的某部分内容

有数据头 复杂数据 截取方式,如对第3例中JSON数据内容只想取“muser”数组中年龄(age)大于30岁的怎么办?

方法1:全部解析,再从 List 中取。(但假如有1万条数据?全部解析太麻烦),方法2:条件遍历!(以下代码示例):

//解析代码:

//拿到JSON字符串

String strByJson =  ConstructTestJsonStr();//此处函数内容省略;

List<UserBean> userBeanList = new ArrayList<>();

//拿到数组

JsonObject jsonObject = new JsonParser().parse(strByJson).getAsJsonObject();

JsonArray jsonArray = jsonObject.getAsJsonArray("muser");

//循环遍历数组

 for (JsonElement user : jsonArray) {

        UserBean userBean = new Gson().fromJson(user, new TypeToken<UserBean>() {

        }.getType());

        //根据条件过滤

        if (Integer.parseInt(userBean.getAge()) > 30) {

            userBeanList.add(userBean);

        }

  }

5.嵌套超复杂JSON

数据转换

三种方式:1,全部解析出来;2,要什么解析什么;3,JsonReader,第1/2招前述已解释,下面示例JsonReader(类似逐节点解释XML)

//通过JsonReader的方式去解析

private void parseComplexJArrayByReader() throws IOException {

    String strByJson = JsonToStringUtil.getStringByJson(this, R.raw.juser_4);

    JsonReader reader = new JsonReader(new StringReader(strByJson));

    try {

        reader.beginObject();

        String tagName = reader.nextName();

        if (tagName.equals("group")) {

            //读group这个节点

            readGroup(reader);

        }

        reader.endObject();

    } finally {

        reader.close();

    }

}

//读group这个节点

private void readGroup(JsonReader reader) throws IOException {

    reader.beginObject();

    while (reader.hasNext()) {

        String tagName = reader.nextName();

        if (tagName.equals("user")) {

            readUser(reader);

        } else if (tagName.equals("info")) {

            readInfo(reader);

        }

    }

    reader.endObject();

}

//读用户基本消息 user节点

private void readUser(JsonReader reader) throws IOException {

    reader.beginObject();

    while (reader.hasNext()) {

        String tag = reader.nextName();

        if (tag.equals("name")) {

            String name = reader.nextString();

            nameText.setText(name);

        } else if (tag.equals("age")) {

            String age = reader.nextString();

            ageText.setText(age);

        }

        ...

        else {

            reader.skipValue();//忽略

        }

    }

    reader.endObject();

}

//读用户其他消息 info节点

private void readInfo(JsonReader reader) throws IOException {

    reader.beginObject();

    while (reader.hasNext()) {

        String tag = reader.nextName();

        if (tag.equals("address")) {

            String address = reader.nextString();

            addressText.setText(address);

        } else if (tag.equals("work")) {

            String work = reader.nextString();

            workText.setText(work);

        }

        ...

        else {

            reader.skipValue();//忽略

        }

    }

    reader.endObject();

}

6.简单数据+LIST+MAP

转换

public class Student {

                   public int id;

                   public String nickName;

                   public int age;

                   public ArrayList<String> books;

                   public HashMap<String, String> booksMap;

}

Student student = new Student();

student.id = 1;

student.nickName = "Jack";

student.age = 22;

student.email = "[email protected]";

ArrayList<String> books = new ArrayList<String>();

books.add("数学");

books.add("语文");

books.add("英语");

books.add("物理");

books.add("化学");

books.add("生物");

student.books = books;

HashMap<String, String> booksMap = new HashMap<String, String>();

booksMap.put("1", "数学");

booksMap.put("2", "语文");

booksMap.put("3", "英语");

booksMap.put("4", "物理");

booksMap.put("5", "化学");

booksMap.put("6", "生物");

student.booksMap = booksMap;

Gson gson = new Gson();

String result = gson.toJson(student);

Student studentG = gson.fromJson(result, Student.class);

Log.e("MainActivity", "id:" + studentG.id);

Log.e("MainActivity", "nickName:" + studentG.nickName);

Log.e("MainActivity", "age:" + studentG.age);

Log.e("MainActivity", "email:" + studentG.email);

Log.e("MainActivity", "books size:" + studentG.books.size());

Log.e("MainActivity", "booksMap size:" + studentG.booksMap.size());

打印输出

id:1

nickName: Jack

age:22

email:[email protected]

books size:6

booksMap size:6

 7.把List或者Map等集合

的泛型换成自定义个class

泛型定义

public HashMap<String,Book> booksMap;

public class Book{

              public int id;

              public String name;

}

HashMap<String, Book> booksMap = gson.fromJson(result, new TypeToken<HashMap<String, Book>>() { }.getType());

Gson gson = new Gson();

HashMap<String, Book> booksMap = new HashMap<>();

booksMap.put("book1", new Book(1, "Java基础开发"));

booksMap.put("book2", new Book(2, "Java设计模式"));

booksMap.put("book3", new Book(3, "Java算法"));

String dataStr = gson.toJson(booksMap);

System.out.println("dataStr:" + dataStr);

HashMap<String, Book> booksMap2 = gson.fromJson(dataStr, new TypeToken<HashMap<String, Book>>() {

        }.getType());

        for (Map.Entry<String, Book> entry : booksMap2.entrySet()) {

System.out.println("key:"+entry.getKey() + "    value:" + entry.getValue().toString());

}

输出结果

dataStr:{"book2":{"id":2,"name":"Java设计模式"},"book1":{"id":1,"name":"Java基础开发"},"book3":{"id":3,"name":"Java算法"}}

key:book2    value:Book{id=2, name='Java设计模式'}

key:book1    value:Book{id=1, name='Java基础开发'}

key:book3    value:Book{id=3, name='Java算法'}
发布了27 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38304672/article/details/103458455