okhttp一直作为Android核心的网络请求框架 这里做简单的一些封装 这里使用语言kotlin (目前作为Google官方Android开发第一语言) 直接上代码:
封装类
OkhttpUtils类:
class OkhttpUtils {
companion object{
private var instance:OkhttpUtils? = null
private var okhttp:OkHttpClient? = null
@Synchronized
fun getInstance():OkhttpUtils{
if (instance == null) instance = OkhttpUtils()
okhttp = OkHttpClient().newBuilder()
.retryOnConnectionFailure(true)
.connectTimeout(10000, TimeUnit.SECONDS) //连接超时
.readTimeout(10000, TimeUnit.SECONDS) //读取超时
.writeTimeout(10000, TimeUnit.SECONDS) //写超时
.build()
return instance!!
}
}
/**
* Get请求
* @map 请求参数 map的key必须不同
* @url 请求地址
* @httpCallBack 回调
*/
fun getRequest(map:HashMap<String,String>,url:String,httpCallBak:HttpCallBack){
var urlRequest:String = ""
var urlL:String = ""
if (map.size > 0){
val list = ArrayList(map.keys)
urlL = "$url?"
for (key in map.keys){
urlRequest += if (list[map.size - 1].equals(key)){
key + "=" + map[key]
}else{
key + "=" + map[key] + "&"
}
}
urlL += urlRequest
}
val request: Request = Request.Builder().url(urlL).build()
val call: Call? = okhttp?.newCall(request)
call?.enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
httpCallBak.onError(e.printStackTrace().toString())
}
override fun onResponse(call: Call, response: Response) {
response.body?.let { httpCallBak.onSuccess(it.string()) }
}
})
}
/**
* Post请求
* @map 请求参数
* @url 请求地址
* @httpCallBack 回调
*/
fun postRequest(map:HashMap<String,String>,url:String,httpCallBak:HttpCallBack){
var builder: FormBody.Builder = FormBody.Builder();
if (map.size > 0){
for (key in map.keys){
key.let {
builder.add(it, map[it].toString())
}
}
}
val formBody:FormBody = builder.build()
val request: Request = Request.Builder().url(url)
.post(formBody)
.build()
val call: Call? = okhttp?.newCall(request)
call?.enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
httpCallBak.onError(e.printStackTrace().toString())
}
override fun onResponse(call: Call, response: Response) {
response.body?.let {
httpCallBak.onSuccess(it.string())
}
}
})
}
}
接口:HttpCallBack:
interface HttpCallBack {
fun onError(errorLog:String)
fun onSuccess(message:String)
}
调用方法(这里只放post请求,get请求同理):
//请求参数
var map = HashMap<String, String>();
map[“map”] = “123456”;
map[“map1”] = “123456”;
//具体请求方法
with(OkhttpUtils) {
getInstance().postRequest(map, “https://www.baidu.com/”, object : HttpCallBack {
override fun onError(errorLog: String) {
}
override fun onSuccess(message: String) {
}
})
}