哈喽,大家新年好,在上一篇聊了Okhttp基本用法之后,准备再和大家聊聊Okhttp的其他方法。还没有看过我上一篇的同学可以点击链接先看看上一篇文章。
下面先说说这篇文章的基本大纲
1、请求超时设置
2、自定义Requestbody
3、Okhttp如何设置Header
4、Response
请求超时设置
在Okhttp访问网络时,我们可以通过它提供给我们的方法来设置Okhttp网络请求超时的时间,这样能更加方便的满足我们的需求。
val okHttpClient = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.readTimeout(10, TimeUnit.SECONDS)//读取超时
.writeTimeout(10, TimeUnit.SECONDS)//写入超时
.build()
val request = Request.Builder()
.url("网络地址")
.build()
val call = okHttpClient.newCall(request)
这里可以根据自己的需求进行设置,如果没有设置的话,默认的时间为10秒。
自定义Requestbody
当我们要以流的方式提交请求体的时候,我们就会用到自定义的Requestbody。
val okHttpClient = OkHttpClient()
val requestBody =object : RequestBody() {
override fun contentType(): MediaType? {
return null
}
override fun writeTo(sink: BufferedSink) {
//以流的方式提交post请求体
val fileInputStream = FileInputStream("path")
val byte = ByteArray(1024)
while ((fileInputStream.read(byte)) != -1) {
//向服务器写入
sink.write(byte)
}
}
}
val request = Request.Builder()
.url("网络地址")
.post(requestBody)
.build()
val call = okHttpClient.newCall(request)
Okhttp如何设置Header
在Okhttp中设置请求头很简单,方法都是现成的
val okHttpClient = OkHttpClient()
val request = Request.Builder()
.url("网络地址")
.header("key1","content1")
.addHeader("key2","content2")
.build()
val call = okHttpClient.newCall(request)
就是这么简单,可以直接设置,包括Cookie也是可以这样设置。
Response
最后我们来简单说说请求返回的Response
response.body()!!.string()//字符串,json等
response.body()!!.bytes()//Btimap等
response.body()!!.byteStream()//IO流,文件等
response.header("key")//获取相应头文件
其中response.body()!!.string()只能调用一次,第二次调用的时候返回值为null。这是因为response.body()!!.string()实质上是输入流获取数据,这是需要服务器有了输出才能获取的。服务器只做了一次输出,所以response.body()!!.string()也只能第一次调用获取数据。因为response.body()!!.string()实质上是输入流,所以也要放在子线程中操作。
关于Okhttp的简单用法到这里就告一段落了,有错误的地方请大家指出来,我们可以多多交流。