博客
关于我
19软件2班 okhttp
阅读量:616 次
发布时间:2019-03-13

本文共 4759 字,大约阅读时间需要 15 分钟。

OkHttp入门与实践

1. 添加OkHttp依赖

在Android项目中引入OkHttp库,是实现网络请求的重要前提。这一步可以通过以下方式完成:

implementation 'com.squareup.okhttp3:okhttp:3.10.0'

2. 占位请求

异步请求实现

private void useAsynGet() {    val okHttpClient = OkHttpClient()    val url = "http://www.qq.com"    val request = Request.Builder().url(url).get().build()    val call = okHttpClient.newCall(request)    call.enqueue(object : Callback {        override fun onFailure(call: Call, e: IOException) {            Log.e("useAsynGet", e.toString())        }        override fun onResponse(call: Call, response: okhttp3.Response): Unit {            val content = response.body().string()            Log.e("useAsynGet", content)            // 在子线程处理,通过Handler发送消息到主线程            val message = Message()            message.what = MSG_WEB_CONTENT            message.obj = content            handler.sendMessage(message)        }    })}

同步请求实现

private void useSyncGet() {    val okHttpClient = OkHttpClient()    val url = "http://www.qq.com"    val request = Request.Builder().url(url).get().build()    val call = okHttpClient.newCall(request)    Thread {        try {            val response = call.execute()            val content = response.body().string()            Log.e("useSyncGet", content)        } catch (e: IOException) {            e.printStackTrace()        }    }.start()}

3. 显示网络内容

为了确保UI更新在主线程 انجام.Foundation历 dequeueReusableCellWithIdentifier(“MSG_WEB_CONTENT”) 来处理消息。

4. OkHttp获取移动电源码

private void useAsynGetMobileCode() {    val okHttpClient = OkHttpClient()    val url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo"    // 注意:实际使用应根据接口文档调整参数    val request = Request.Builder().url(url).get().build()    val call = okHttpClient.newCall(request)    call.enqueue(object : Callback {        override fun onFailure(call: Call, e: IOException) {            Log.e("useAsynGetMobileCode", e.toString())        }        override fun onResponse(call: Call, response: okhttp3.Response): Unit {            val content = response.body().string()            Log.e("useAsynGetMobileCode", content)            // 通过Handler发送消息到主线程            val message = Message()            message.what = MSG_WEB_CONTENT            message.obj = content            handler.sendMessage(message)        }    })}

5. OkHttp POST 请求

private void useOkhttpPost() {    val url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo"    // 参数通过FormBodyBuilder构建    val requestBody = FormBody.Builder()        .add("mobileCode", "13456789999")        .add("userID", "")        .build()    val okHttpClient = OkHttpClient()    val request = Request.Builder().url(url).post(requestBody).build()    val call = okHttpClient.newCall(request)    call.enqueue(object : Callback {        override fun onFailure(call: Call, e: IOException) {            Log.e("useOkhttpPost", e.toString())        }        override fun onResponse(call: Call, response: okhttp3.Response): Unit {            val content = response.body().string()            Log.e("useOkhttpPost", content)            // 发送消息到主线程            val message = Message()            message.what = MSG_WEB_CONTENT            message.obj = content            handler.sendMessage(message)        }    })}

6. OkHttp 获取图片

private void useOkhttpGetImage() {    val url = "http://www.gdcp.edu.cn/service?token=5a5d0c3fa9a145719be5b98f7b49eb56"    val okHttpClient = OkHttpClient()    val request = Request.Builder().url(url).get().build()    val call = okHttpClient.newCall(request)    call.enqueue(object : Callback {        override fun onFailure(call: Call, e: IOException) {            Log.e("useOkhttpGetImage", e.toString())        }        override fun onResponse(call: Call, response: okhttp3.Response): Unit {            Log.e("useOkhttpGetImage", response.message())            val inputStream = response.body().byteStream()            val bitmap = BitmapFactory.decodeStream(inputStream)//            {/*此处在子线程处理,需通过Handler发送到主线程*/}            val message = Message()            message.what = MSG_GET_IMG            message.obj = bitmap            handler.sendMessage(message)        }    })}

初始化Handler

private val handler: Handler by lazy {    Handler(object : Handler.Callback {        override fun handleMessage(msg: Message): Boolean {            when (msg.what) {                MSG_WEB_CONTENT -> {                    val content = msg.obj as String                    tv_show.text = content                    return true                }                MSG_GET_IMG -> {                    val bitmap = msg.obj as Bitmap                    iv_show.setImageBitmap(bitmap)                    return true                }            }            return false        }    })}

Handler 替代.Bus

Bus实现了EventBus功能,可以用于消息传递。但在本文中,直接使用Handler更为简便。

转载地址:http://kxqaz.baihongyu.com/

你可能感兴趣的文章
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>
mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
查看>>
MySQL 的instr函数
查看>>
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>