到這里我們可以嘗試使用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 類用于進行請求
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 { }是一個擴展函數(shù),其作用就是開辟一個線程泽西,接下來在MainActivity調(diào)用運行測試下返回結(jié)果
看下圖曹铃,調(diào)用成功接下來我們將解析json,并將這些數(shù)據(jù)使用控件進行展示
解析數(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)
你們仔細看下數(shù)據(jù)格式可以看出來三個data完全是解析了json的一個bean
第三步:就是將json解析到我們的數(shù)據(jù)類中尝苇,我們需要通過Gson包對Json進行解析 需要在Gradle 中添加依賴
compile "com.google.code.gson:gson:2.4"
最后在我們的Request 請求類中對json 進行解析,在方法添加返回值將數(shù)據(jù)返回,
fun request() : RequestFore{
val data = URL(url).readText()
// 解析json到數(shù)據(jù)類
val request = Gson().fromJson(data,RequestFore::class.java)
return request
}
最后在MainActivity 進行數(shù)據(jù)展示 :運行看結(jié)果
async {
val request:RequestFore = Request(url).run()
// 線程轉(zhuǎn)換铛只,切換至UI線程
uiThread {
main_hello.text = request.result.data[0].toString()
}
}
可以看到,線程切換成功糠溜,數(shù)據(jù)顯示