主要目标:
- 使用kotlin+OkHttp3实现,发起http请求,同步处理响应数据和异步处理响应数据;
- 使用gson实现字符串反序列化和序列化;
- 使用线程池去执行;
- 为后续编写kotlin版本的下载器做知识储备;
maven配置文件
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit5</artifactId>
<version>1.7.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.10.0</version>
</dependency>
</dependencies>
测试主类
package com.jack.demo
import com.jack.demo.thread.TaskOne
import java.util.concurrent.LinkedBlockingDeque
import java.util.concurrent.ThreadPoolExecutor
import java.util.concurrent.TimeUnit
fun main(args: Array<String>) {
//线程池
val pool = ThreadPoolExecutor(
2, 200,
120L, TimeUnit.SECONDS,
LinkedBlockingDeque<Runnable>(),//无界,FIFO队列
ThreadPoolExecutor.AbortPolicy()
);
println("******************线程")
for (index in 1..1) {
pool.execute(TaskOne())
}
TimeUnit.SECONDS.sleep(1L)
println("******************")
}
样例请求并解析:
import com.google.gson.Gson
import com.google.gson.JsonObject
import okhttp3.*
import java.io.IOException
class TaskOne : Thread() {
val gson: Gson = Gson()
override fun run() {
var url: String = "http://127.0.0.1:8090/xxoo/path/play"
//请求参数Map
var jsonObj = JsonObject()
jsonObj.addProperty("roomId", "1562041467716960258")
jsonObj.addProperty("subjectId", "1557607618707628034")
jsonObj.addProperty("sceneNo", 1)
//请求体封装
val requestBody: RequestBody = RequestBody.create(
MediaType.parse("application/json;charset=UTF-8"),
jsonObj.toString().encodeToByteArray()
)
var builder = Request.Builder()
builder.url(url)
.post(requestBody)
val client = OkHttpClient()
var response: Response = client.newCall(builder.build()).execute()
var responseStr = response.body()?.string()
println("同步处理->响应数据:" + responseStr)
//字符串装map对象
var resultMap: Map<String, Any> = HashMap()
resultMap = Gson().fromJson(responseStr, resultMap.javaClass)
println("json字符串转换为map类型" + resultMap.toString())
/**
* 请求结果异步处理
*/
client.newCall(builder.build()).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
println("异步处理->请求失败")
}
override fun onResponse(call: Call, response: Response) {
var stA = response.body()!!.string()
println("异步处理->请求成功 响应数据:$stA")
}
})
}
}