博客
关于我
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/

你可能感兴趣的文章
mysql -存储过程
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
MySQL Cluster与MGR集群实战
查看>>