После записи экрана я должен загрузить это видео на сервер.
Я пишу ниже коды, но при чтении файла Uri и загрузке на сервер появляется ошибка!
Коды деятельности:
Код: Выделить всё
lifecycleScope.launch {
delay(250)
fileUri = if (SDK_INT >= VERSION_CODES.Q) FILE_URI else FILE_PATH?.convertFileToUri()
Log.e("filePathUri","FileUri $fileUri")
uploadVideo(fileUri!!)
}
private fun uploadVideo(uri: Uri) {
val file = getFileFromContentUri5(this, uri)
val bodyBuilder = MultipartBody.Builder().setType(MultipartBody.FORM)
Log.e("filePathUri","File path ${file?.path}")
bodyBuilder.addFormDataPart("file", file?.name, file!!.asRequestBody("video/*".toMediaTypeOrNull()))
val requestBody = bodyBuilder.build()
val requestBodyWithProgress = RequestBodyWithProgress(requestBody) { progress ->
runOnUiThread {
binding.apply {
uploadProgress.progress = progress
uploadPercentageTxt.text = "$progress%"
}
}
}
//Call api
viewModel.callPostUploadVideo(testId, requestBodyWithProgress)
}
fun getFileFromContentUri5(context: Context, contentUri: Uri): File? {
val contentResolver = context.contentResolver
val file = File(context.cacheDir, "temp_video.mp4")
try {
contentResolver.openInputStream(contentUri)?.use { inputStream ->
FileOutputStream(file).use { outputStream ->
inputStream.copyTo(outputStream)
}
}
} catch (e: Exception) {
e.printStackTrace()
return null
}
if (file.length() > 0) {
return file
} else {
Log.e("Error", "File is empty after copying from URI")
return null
}
}
Код: Выделить всё
FileUri content://media/external/video/media/1000023197
File path null
Код: Выделить всё
Process: com.myapp, PID: 26203
java.lang.NullPointerException
at com.myapp.ui.compress_upload.CompressUploadActivity.uploadVideo(CompressUploadActivity.kt:193)
at com.myapp.ui.compress_upload.CompressUploadActivity.access$uploadVideo(CompressUploadActivity.kt:53)
at com.myapp.ui.compress_upload.CompressUploadActivity$onCreate$2.invokeSuspend(CompressUploadActivity.kt:116)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:234)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)
at kotlinx.coroutines.CancellableContinuationImpl.resumeUndispatched(CancellableContinuationImpl.kt:518)
at kotlinx.coroutines.android.HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1.run(Runnable.kt:19)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:9063)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:588)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@d518d27, Dispatchers.Main.immediate]
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-android
Мобильная версия