Android 文件选择器意图导致应用程序在选择一个文件时崩溃
正如问题的名称所暗示的,我的意图文件选择器有一个奇怪的错误。 我的意图允许我选择多个文件。当我选择多个文件时,应用程序不会崩溃。一切都很好。我可以播放所有选定的文件。但是,当我选择一个文件时,它会崩溃并出现一个奇怪的异常(可能是空数据?)。 看,我实现了一个歌曲列表(它是Uri类型的可变列表)。它应该接收由intent返回的Uri并添加到其中。 提前谢谢 意向调用和ActivityResult的代码如下所示 意向租赁Android 文件选择器意图导致应用程序在选择一个文件时崩溃,android,android-intent,kotlin,onactivityresult,Android,Android Intent,Kotlin,Onactivityresult,正如问题的名称所暗示的,我的意图文件选择器有一个奇怪的错误。 我的意图允许我选择多个文件。当我选择多个文件时,应用程序不会崩溃。一切都很好。我可以播放所有选定的文件。但是,当我选择一个文件时,它会崩溃并出现一个奇怪的异常(可能是空数据?)。 看,我实现了一个歌曲列表(它是Uri类型的可变列表)。它应该接收由intent返回的Uri并添加到其中。 提前谢谢 意向调用和ActivityResult的代码如下所示 意向租赁 fun onMusicFileChooserClicked(v: View)
fun onMusicFileChooserClicked(v: View) {
val intent = Intent()
.setType("audio/*")
.setAction(Intent.ACTION_GET_CONTENT)
.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
startActivityForResult(Intent.createChooser(intent, "Select a file"), 111)
}
活动结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 111 && resultCode == RESULT_OK) {
for (i in 0 until data?.clipData!!.itemCount) {
val uri = data?.clipData?.getItemAt(i)?.uri
songlist.add(uri)
}
selectfilesucess = true
updateMetaData()
}
}
日志
解决了这个问题
问题是我没有检查空指针。基本上,我必须检查clipdate==null,如果为true,则它是一个文件。如果不是,则是多个文件。
我真傻。希望这对别人有帮助
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 111 && resultCode == RESULT_OK && data!=null) {
val clipdata = data.clipData
if(clipdata!=null){
for (i in 0 until data?.clipData!!.itemCount) {
val uri = data?.clipData?.getItemAt(i)?.uri
songlist.add(uri)
}
}else{
val uri = data?.data
songlist.add(uri)
}
}
解决了
问题是我没有检查空指针。基本上,我必须检查clipdate==null,如果为true,则它是一个文件。如果不是,则是多个文件。
我真傻。希望这对别人有帮助
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 111 && resultCode == RESULT_OK && data!=null) {
val clipdata = data.clipData
if(clipdata!=null){
for (i in 0 until data?.clipData!!.itemCount) {
val uri = data?.clipData?.getItemAt(i)?.uri
songlist.add(uri)
}
}else{
val uri = data?.data
songlist.add(uri)
}
}