目标:知道在Android上使用okttp4进行的上传是成功还是失败。已尝试:一定时间后,将查询发送到服务器。这可能不是最佳方法。代码:
var url = HttpUrl.Builder()
.scheme("http")
.host(ConstantValues.HOST)
.port(ConstantValues.PORT)
.addPathSegment(relativeUrl)
.addQueryParameter("fileName", "expectedFileSize")
.build()
val request = Request.Builder()
.url(url)
.get().build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: java.io.IOException) {
e.printStackTrace()
}
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
val result: String = response.body?.string() ?: "failed"
checkSizesMatch(result)
}
}
})
这可以满足我们的需求。是否有直接方法可以完成此操作而无需对服务器进行特定查询?是否有回调函数可以告诉我文件是否已完全上传成功?
我发现要使用的解决方案
CountingRequestBody
装饰OkHttp请求主体以计算在写入它时写入的字节数。能够装饰任何请求正文,但对于跟踪大型请求的上传进度最有用多部分请求。
它可以让应用监控上传活动。这样,您无需发送查询到服务器来监视此过程即可知道它花费了多少时间以及何时完成。