到这里我们可以尝试使用Kotlin 发起一次API 的请求获取数据。带你体验最简洁的数据请求,将数据解析,并展示!
首先我们需要一个API,用于请求数据。
请求地址:http://japi.juhe.cn/joke/content/text.from
请求参数: page=&pagesize=&key=26e9ed96a3ea69201844871a9ef4acec
请求方式:GET
数据格式自己拼接请求一下,我就不给了.
首先我们创建一个Request 类用于进行请求
class Request(val url:String){
// 请求方法
fun request(){
val requestData = URL(url).readText()
Log.e("TAG",requestData)
}
}
解释下上面的这段代码,首先创建了一个类,构造器中要求传入一个url,在请求方法中通过 URL(url).readText() 发起请求,得到返回的数据,通过log打印返回的结果 其实发起请求只需要一行带代码 URL(url).readText()它会返回请求到的json数据我们可以调用测试一下,记得请求数据需要在子线程,还有不要忘了网络请求权限;
async{
var url:String = "http://japi.juhe.cn/joke/content/text.from?page=&pagesize=&key=26e9ed96a3ea69201844871a9ef4acec"
Request(url).request()
}
async { }是一个扩展函数,其作用就是开辟一个线程,接下来在MainActivity调用运行测试下返回结果
看下图,调用成功接下来我们将解析json,并将这些数据使用控件进行展示
解析数据口用到了Kotlin中的数据类(data)
第一步:创建一个File
第二步,跟据数据格式编写这个File (通过Json编写Bean)
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)
你们仔细看下数据格式可以看出来三个data完全是解析了json的一个bean
第三步:就是将json解析到我们的数据类中,我们需要通过Gson包对Json进行解析 需要在Gradle 中添加依赖
compile "com.google.code.gson:gson:2.4"
最后在我们的Request 请求类中对json 进行解析,在方法添加返回值将数据返回,
fun request() : RequestFore{
val data = URL(url).readText()
// 解析json到数据类
val request = Gson().fromJson(data,RequestFore::class.java)
return request
}
最后在MainActivity 进行数据展示 :运行看结果
async {
val request:RequestFore = Request(url).run()
// 线程转换,切换至UI线程
uiThread {
main_hello.text = request.result.data[0].toString()
}
}
可以看到,线程切换成功,数据显示