簡(jiǎn)單聊聊Okhttp基本用法(二)

哈嘍,大家新年好,在上一篇聊了Okhttp基本用法之后,準(zhǔn)備再和大家聊聊Okhttp的其他方法。還沒有看過(guò)我上一篇的同學(xué)可以點(diǎn)擊鏈接先看看上一篇文章。

簡(jiǎn)單聊聊Okhttp基本用法

下面先說(shuō)說(shuō)這篇文章的基本大綱

1、請(qǐng)求超時(shí)設(shè)置

2、自定義Requestbody

3、Okhttp如何設(shè)置Header

4、Response


請(qǐng)求超時(shí)設(shè)置

在Okhttp訪問(wèn)網(wǎng)絡(luò)時(shí),我們可以通過(guò)它提供給我們的方法來(lái)設(shè)置Okhttp網(wǎng)絡(luò)請(qǐng)求超時(shí)的時(shí)間,這樣能更加方便的滿足我們的需求。

val okHttpClient = OkHttpClient.Builder()

? ? .connectTimeout(10, TimeUnit.SECONDS)//連接超時(shí)

? ? .readTimeout(10, TimeUnit.SECONDS)//讀取超時(shí)

? ? .writeTimeout(10, TimeUnit.SECONDS)//寫入超時(shí)

? ? .build()

val request = Request.Builder()

.url("網(wǎng)絡(luò)地址")

.build()

val call = okHttpClient.newCall(request)

這里可以根據(jù)自己的需求進(jìn)行設(shè)置,如果沒有設(shè)置的話,默認(rèn)的時(shí)間為10秒。


自定義Requestbody

當(dāng)我們要以流的方式提交請(qǐng)求體的時(shí)候,我們就會(huì)用到自定義的Requestbody。

val okHttpClient = OkHttpClient()

val requestBody =object : RequestBody() {

override fun contentType(): MediaType? {

return null

? ? }

override fun writeTo(sink: BufferedSink) {

//以流的方式提交post請(qǐng)求體

? ? ? ? val fileInputStream = FileInputStream("path")

val byte = ByteArray(1024)

while ((fileInputStream.read(byte)) != -1) {

//向服務(wù)器寫入

? ? ? ? ? ? sink.write(byte)

}

}

}

val request = Request.Builder()

.url("網(wǎng)絡(luò)地址")

.post(requestBody)

.build()

val call? = okHttpClient.newCall(request)


Okhttp如何設(shè)置Header

在Okhttp中設(shè)置請(qǐng)求頭很簡(jiǎn)單,方法都是現(xiàn)成的

val okHttpClient = OkHttpClient()

val request = Request.Builder()

.url("網(wǎng)絡(luò)地址")

.header("key1","content1")

.addHeader("key2","content2")

.build()

val call = okHttpClient.newCall(request)

就是這么簡(jiǎn)單,可以直接設(shè)置,包括Cookie也是可以這樣設(shè)置。


Response

最后我們來(lái)簡(jiǎn)單說(shuō)說(shuō)請(qǐng)求返回的Response

response.body()!!.string()//字符串,json等

response.body()!!.bytes()//Btimap等

response.body()!!.byteStream()//IO流,文件等

response.header("key")//獲取相應(yīng)頭文件

其中response.body()!!.string()只能調(diào)用一次,第二次調(diào)用的時(shí)候返回值為null。這是因?yàn)閞esponse.body()!!.string()實(shí)質(zhì)上是輸入流獲取數(shù)據(jù),這是需要服務(wù)器有了輸出才能獲取的。服務(wù)器只做了一次輸出,所以response.body()!!.string()也只能第一次調(diào)用獲取數(shù)據(jù)。因?yàn)閞esponse.body()!!.string()實(shí)質(zhì)上是輸入流,所以也要放在子線程中操作。


關(guān)于Okhttp的簡(jiǎn)單用法到這里就告一段落了,有錯(cuò)誤的地方請(qǐng)大家指出來(lái),我們可以多多交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言: Android開發(fā)中網(wǎng)絡(luò)開發(fā)是一個(gè)很重要的模塊,基本上所有的APP也都用到了這個(gè)模塊。從最開始自己實(shí)現(xiàn)網(wǎng)絡(luò)...
    Jevely閱讀 1,353評(píng)論 0 2
  • 前言 在Android開發(fā)中,發(fā)送HTTP請(qǐng)求是很常見的。SDK中自帶的HttpURLConnection雖然能基...
    Jowney閱讀 847評(píng)論 0 5
  • 參考:https://blog.csdn.net/fightingxia/article/details/7094...
    文強(qiáng)小弟閱讀 1,286評(píng)論 0 1
  • 這篇文章說(shuō)下OkHttp的基本用法,是最新的3哦,如果你曾經(jīng)在網(wǎng)上搜索OkHttp怎么使用發(fā)現(xiàn)有些類沒有了可能是因...
    追逐黃昏的太陽(yáng)閱讀 1,002評(píng)論 1 1
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎(chǔ)知識(shí) 密鑰:一般就是一個(gè)字符串或數(shù)字,在加密或者解密時(shí)傳遞給加密/解密算...
    AndroidMaster閱讀 4,112評(píng)論 1 8

友情鏈接更多精彩內(nèi)容