san
01/04/2021, 10:11 AMsanket
01/04/2021, 10:12 AMDean Djermanović
01/04/2021, 10:14 AMsan
01/04/2021, 10:14 AMsan
01/04/2021, 10:15 AMDean Djermanović
01/04/2021, 10:17 AMRequestBody
that will emit progress. Here’s how I did this in my project:
class ProgressEmittingRequestBody(
private val mediaType: String,
private val file: File,
private val onProgressUpdate: (Int) -> Unit
) : RequestBody() {
override fun contentType(): MediaType? = MediaType.parse(mediaType)
override fun contentLength(): Long = file.length()
override fun writeTo(sink: BufferedSink) {
val inputStream = FileInputStream(file)
val buffer = ByteArray(BUFFER_SIZE)
var uploaded: Long = 0
val fileSize = file.length()
try {
while (true) {
val read = inputStream.read(buffer)
if (read == -1) break
uploaded += read
sink.write(buffer, 0, read)
val progress = (((uploaded / fileSize.toDouble())) * 100).toInt()
onProgressUpdate(progress)
}
} catch (e: Exception) {
Timber.e(e)
} finally {
inputStream.close()
}
}
companion object {
const val BUFFER_SIZE = 1024
}
}
san
01/04/2021, 10:18 AMsan
01/04/2021, 10:19 AMDean Djermanović
01/04/2021, 10:24 AMsan
01/04/2021, 11:40 PMsan
01/04/2021, 11:40 PM