Android okhttp网络请求封装不使用接口实现回调 使用函数作为参数方式实现回调Kotlin(5)

在之前java开发Android做回调都是使用接口来做的,kotlin后面新增函数作为参数解决啦只限于接口做回调,使用更加方便,上代码:
新增OkhttpFunCallBack类:
class OkhttpFunCallBack : Callback{

var mOkHttpCall:((requestBody: RequestBodyContent<T>?)->Unit)?= null
var mOkHttpError:((error: String)->Unit)?= null
private var  mTypeToken:TypeToken<RequestBodyContent<T>>? = null

constructor()

constructor( okHttpCall:(requestBody: RequestBodyContent<T>?) -> Unit,
             okHttpError:(error: String) -> Unit,
             typeToken:TypeToken<RequestBodyContent<T>>){
    mOkHttpCall = okHttpCall
    mOkHttpError = okHttpError
    mTypeToken = typeToken
}



override fun onFailure(call: Call, e: IOException) {
        mOkHttpError?.let { it1 -> it1("") }
}

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 content: RequestBodyContent<T>? = JsonUtils.jsonTo2(it1,
                    mTypeToken)
                Log.e("token",content.toString())
                mOkHttpCall?.let { it2 -> it2(content) };
            }
        }

    }
}

}
修改OkhttpUtils类:新增加postJsonFunRequest方法
代码: fun postJsonFunRequest(map:HashMap<String,String>,url:String,okhttpCallBack: OkhttpFunCallBack){
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)

}

调用方法:(map是参数)
val datType:TypeToken<RequestBodyContent> = object : TypeToken<RequestBodyContent>(){};
with(OkhttpUtils){
getInstance().postJsonFunRequest(map,“url”,
OkhttpFunCallBack(okHttpCall = { requestBody ->
Log.e(“”,“” + requestBody?.result?.name)
Toast.makeText(getApplication(),“请求网络数据是:” + requestBody?.result?.name
,Toast.LENGTH_LONG).show()
}, okHttpError = {typeToken ->
Log.e(“”,typeToken)
},datType))
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值