Как загрузить файл с Uri на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как загрузить файл с Uri на Android

Сообщение Anonymous »

В своем приложении я хочу использовать эту библиотеку для записи экрана: https://github.com/HBiSoft/HBRecorder

После записи экрана я должен загрузить это видео на сервер.

Я пишу ниже коды, но при чтении файла 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
}
}
Покажите мне этот журнал для файла в logcat:

Код: Выделить всё

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]
Я знаю эту ошибку для NullPointerExeption! но я хочу знать, почему мне показывают нулевой путь и как я могу это исправить?

Подробнее здесь: https://stackoverflow.com/questions/791 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»