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

你可能感兴趣的文章
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>