Android okhttp网络请求封装 CallBak封装(3)

直接上代码:
OkhttpUtils类:
/**
* 自定义Callback
*/
fun postJsonRequest(map:HashMap<String,String>,url:String,okhttpCallBack: OkhttpCallBack){
if (TextUtils.isEmpty(url)){ return }
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(okhttpCallBack)

}
OkhttpCallBack类:
 class OkhttpCallBack<T> : Callback{

private var mOkHttpCall: OkHttpCall<T>? = null
constructor()

constructor(okHttpCall: OkHttpCall<T>){
    mOkHttpCall = okHttpCall
}



override fun onFailure(call: Call, e: IOException) {
    mOkHttpCall?.onError("")
}

override fun onResponse(call: Call, response: Response) {
    val body: String? = response.body?.string();
    response.body?.let {
        //一定要Dispatchers.Main 不然协程不会切换线程
        GlobalScope.launch(Dispatchers.Main) {
            body?.let { it1 ->
                val  typeToken:TypeToken<RequestBodyContent<T>> = object : TypeToken<RequestBodyContent<T>>(){};
                val content: RequestBodyContent<T>? = JsonUtils.jsonTo(it1,
                    typeToken)

                mOkHttpCall?.onSuccess(content)
            }
        }

    }
}

interface OkHttpCall<T>{
    fun onSuccess(requestBody: RequestBodyContent<T>?);
    fun onError(error: String);
}

}
JsonUtils类解析类封装:
class JsonUtils {
companion object {
/**
* 通过该方法可以解析两层
* RequestBodyContent 一层 固定的一层
* T 一层(可任意实体类)
*/
fun jsonTo(json: String?,typeEntity :TypeToken<RequestBodyContent>): RequestBodyContent? {
val type:Type = typeEntity.type
return Gson().fromJson(json, type)
}
}
}
使用方法:PeopleBean是实体类
with(OkhttpUtils){
getInstance().postJsonRequest(map,“”, OkhttpCallBack(
object : OkhttpCallBack.OkHttpCall{
override fun onSuccess(requestBody: RequestBodyContent?) {

                }

                override fun onError(error: String) {

                }

            }
        ))

    } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值