IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android okhttp网络请求封装不使用接口实现回调 使用函数作为参数方式实现回调Kotlin(5) -> 正文阅读

[移动开发]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))
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:42:07  更:2022-02-26 11:44:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:41:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码