Java 打开失败:enoint(没有这样的文件或目录)-文件
我有一个Kotlin应用程序。我正在尝试从设备中拾取音频。以下是获取音频文件的方法: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
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是预期的
。