到這里我們可以嘗試使用Kotlin 發(fā)起一次API 的請求獲取數(shù)據(jù)。帶你體驗最簡潔的數(shù)據(jù)請求,將數(shù)據(jù)解析,并展示!
首先我們需要一個API,用于請求數(shù)據(jù)。
請求地址:http://japi.juhe.cn/joke/content/text.from
請求參數(shù): page=&pagesize=&key=26e9ed96a3ea69201844871a9ef4acec
請求方式:GET
數(shù)據(jù)格式自己拼接請求一下,我就不給了.
首先我們創(chuàng)建一個Request 類用于進(jìn)行請求
class Request(val url:String){
// 請求方法
fun request(){
val requestData = URL(url).readText()
Log.e("TAG",requestData)
}
}
解釋下上面的這段代碼,首先創(chuàng)建了一個類,構(gòu)造器中要求傳入一個url,在請求方法中通過 URL(url).readText() 發(fā)起請求,得到返回的數(shù)據(jù),通過log打印返回的結(jié)果 其實發(fā)起請求只需要一行帶代碼 URL(url).readText()它會返回請求到的json數(shù)據(jù)我們可以調(diào)用測試一下,記得請求數(shù)據(jù)需要在子線程,還有不要忘了網(wǎng)絡(luò)請求權(quán)限;
async{
var url:String = "http://japi.juhe.cn/joke/content/text.from?page=&pagesize=&key=26e9ed96a3ea69201844871a9ef4acec"
Request(url).request()
}
async { }是一個擴(kuò)展函數(shù),其作用就是開辟一個線程,接下來在MainActivity調(diào)用運行測試下返回結(jié)果
看下圖,調(diào)用成功接下來我們將解析json,并將這些數(shù)據(jù)使用控件進(jìn)行展示

解析數(shù)據(jù)口用到了Kotlin中的數(shù)據(jù)類(data)
第一步:創(chuàng)建一個File

第二步,跟據(jù)數(shù)據(jù)格式編寫這個File (通過Json編寫B(tài)ean)
package com.xzz.draw.js_kotin
/**
* Created by Administrator on 2017/6/8 0008.
*/
data class RequestFore(val error_code:Int,val reason:String,val result:RequestData)
data class RequestData(val data:List<Joke>)
data class Joke(val content:String,val hashId:String,val unixtime:Int,val updatetime:String)
你們仔細(xì)看下數(shù)據(jù)格式可以看出來三個data完全是解析了json的一個bean
第三步:就是將json解析到我們的數(shù)據(jù)類中,我們需要通過Gson包對Json進(jìn)行解析 需要在Gradle 中添加依賴
compile "com.google.code.gson:gson:2.4"
最后在我們的Request 請求類中對json 進(jìn)行解析,在方法添加返回值將數(shù)據(jù)返回,
fun request() : RequestFore{
val data = URL(url).readText()
// 解析json到數(shù)據(jù)類
val request = Gson().fromJson(data,RequestFore::class.java)
return request
}
最后在MainActivity 進(jìn)行數(shù)據(jù)展示 :運行看結(jié)果
async {
val request:RequestFore = Request(url).run()
// 線程轉(zhuǎn)換,切換至UI線程
uiThread {
main_hello.text = request.result.data[0].toString()
}
}

可以看到,線程切換成功,數(shù)據(jù)顯示