Java 打开失败:enoint(没有这样的文件或目录)-文件

Java 打开失败:enoint(没有这样的文件或目录)-文件,java,android,kotlin,Java,Android,Kotlin,我有一个Kotlin应用程序。我正在尝试从设备中拾取音频。以下是获取音频文件的方法: override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 111 && resultCode == Activit

我有一个Kotlin应用程序。我正在尝试从设备中拾取音频。以下是获取音频文件的方法:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == 111 && resultCode == Activity.RESULT_OK && data != null) {
            fileData = data.data!!
            newAudio = fileData
        }
    }
问题在于:

val file = File(newAudio?.path!!)
val requestFile = RequestBody.create(MediaType.parse("audio/mpeg"), file)
val bodyFile = MultipartBody.Part.createFormData("file", file.name, requestFile)

RetrofitService().uploadAudio(bodyFile).enqueue(object : Callback<Any> {
    @SuppressLint("LogNotTimber")
    override fun onFailure(call: Call<Any>, t: Throwable) {
        d("#Error", "${t.message}")
        mainContent.visibility = VISIBLE
        newAudioProgressBar.visibility = GONE

        Toast.makeText(requireContext(), t.message, Toast.LENGTH_SHORT).show()
    }

    @SuppressLint("LogNotTimber")
    override fun onResponse(call: Call<Any>, response: Response<Any>) {
        navHostFragment.findNavController().navigate(R.id.myAudiosFragment)
        Toast.makeText(requireContext(), "Audio uploaded successfully!", Toast.LENGTH_SHORT).show()
    }
})
val file=file(newAudio?.path!!)
val requestFile=RequestBody.create(MediaType.parse(“音频/mpeg”),文件)
val bodyFile=MultipartBody.Part.createFormData(“文件”,file.name,requestFile)
InversionService().uploadAudio(bodyFile).enqueue(对象:回调{
@抑绒(“原木”)
覆盖失效时的乐趣(调用:调用,t:可丢弃){
d(“#错误”,“${t.message}”)
mainContent.visibility=可见
newAudioProgressBar.visibility=消失
Toast.makeText(requireContext(),t.message,Toast.LENGTH\u SHORT.show())
}
@抑绒(“原木”)
覆盖fun onResponse(调用:调用,响应:响应){
navHostFragment.findNavController().navigate(R.id.myAudiosFragment)
Toast.makeText(requireContext(),“音频上传成功!”,Toast.LENGTH\u SHORT.show()
}
})

我进入logcat:
D/#Error:/document/primary:Music/Track28.mp3:openfailed:enoint(没有这样的文件或目录)
。该文件存在,因为我从设备中拾取了它。我想这条路有问题。我受够了。请帮忙。为什么会这样?

我们对此进行了广泛的讨论。
Uri
不是文件,但您将其视为一个文件。摆脱
val file=file(newAudio?.path!!)
。将
RequestBody.create(MediaType.parse(“音频/mpeg”),file)
替换为@commonware,是的,但我仍然无法获取内容类型。我得到一个字符串,但我需要内容类型。@Commonware,那么我应该在InputStreamRequestBody中的uri(uri类型)中放入什么?“我仍然无法获取内容类型”--您可以,传入您的
uri
。或者,调用
DocumentFile.fromsingeluri()
,传入您的
Uri
,然后对返回的
DocumentFile
调用
getType()
。“我应该在InputStreamRequestBody中的uri(uri类型)中放入什么?”--在
onActivityResult()中的
Intent
中出现的
uri
。您在代码中调用
fileData
。当我调用get type并传递
newAudio
时,我得到
类型不匹配:推断的类型是String?但MediaType是预期的