OkHttps 的上傳進(jìn)度監(jiān)聽(tīng),監(jiān)聽(tīng)的是所有請(qǐng)求報(bào)文體的發(fā)送進(jìn)度,示例代碼:
http.sync("/upload")
.addBodyParam("name", "Jack")
.addBodyParam("age", 20)
.addFileParam("avatar", "D:/image/avatar.jpg")
.setStepBytes(1024) // 設(shè)置每發(fā)送 1024 個(gè)字節(jié)執(zhí)行一次進(jìn)度回調(diào)(不設(shè)置默認(rèn)為 8192)
// .setStepRate(0.01) // 設(shè)置每發(fā)送 1% 執(zhí)行一次進(jìn)度回調(diào)(不設(shè)置以 StepBytes 為準(zhǔn))
.setOnProcess((Process process) -> { // 上傳進(jìn)度回調(diào)
long doneBytes = process.getDoneBytes(); // 已發(fā)送字節(jié)數(shù)
long totalBytes = process.getTotalBytes(); // 總共的字節(jié)數(shù)
double rate = process.getRate(); // 已發(fā)送的比例
boolean isDone = process.isDone(); // 是否發(fā)送完成
})
.post()
咦!怎么感覺(jué)和下載的進(jìn)度回調(diào)的一樣?沒(méi)錯(cuò)!OkHttps 還是使用同一套API處理上傳和下載的進(jìn)度回調(diào),區(qū)別只在于上傳是在get/post
方法之前使用這些API,下載是在getBody
方法之后使用。很好理解:get/post
之前是準(zhǔn)備發(fā)送請(qǐng)求時(shí)段,有上傳的含義,而getBody
之后,已是報(bào)文響應(yīng)的時(shí)段,當(dāng)然是下載。
上傳文件的過(guò)程控制就很簡(jiǎn)單,和常規(guī)請(qǐng)求一樣,只有異步發(fā)起的上傳可以取消:
HttpCall call = http.async("/upload")
.addFileParam("test", "D:/download/test.zip")
.setOnProcess((Process process) -> {
System.out.println(process.getRate());
})
.post()
call.cancel(); // 取消上傳
上傳就沒(méi)有暫停和繼續(xù)這個(gè)功能啦,應(yīng)該沒(méi)人有這個(gè)需求吧?
如果覺(jué)得 OkHttps 好用,就去點(diǎn)個(gè) Star 吧,項(xiàng)目地址:
更多建議: