Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文件选择器意图导致应用程序在选择一个文件时崩溃_Android_Android Intent_Kotlin_Onactivityresult - Fatal编程技术网

Android 文件选择器意图导致应用程序在选择一个文件时崩溃

Android 文件选择器意图导致应用程序在选择一个文件时崩溃,android,android-intent,kotlin,onactivityresult,Android,Android Intent,Kotlin,Onactivityresult,正如问题的名称所暗示的,我的意图文件选择器有一个奇怪的错误。 我的意图允许我选择多个文件。当我选择多个文件时,应用程序不会崩溃。一切都很好。我可以播放所有选定的文件。但是,当我选择一个文件时,它会崩溃并出现一个奇怪的异常(可能是空数据?)。 看,我实现了一个歌曲列表(它是Uri类型的可变列表)。它应该接收由intent返回的Uri并添加到其中。 提前谢谢 意向调用和ActivityResult的代码如下所示 意向租赁 fun onMusicFileChooserClicked(v: View)

正如问题的名称所暗示的,我的意图文件选择器有一个奇怪的错误。 我的意图允许我选择多个文件。当我选择多个文件时,应用程序不会崩溃。一切都很好。我可以播放所有选定的文件。但是,当我选择一个文件时,它会崩溃并出现一个奇怪的异常(可能是空数据?)。 看,我实现了一个歌曲列表(它是Uri类型的可变列表)。它应该接收由intent返回的Uri并添加到其中。 提前谢谢

意向调用和ActivityResult的代码如下所示

意向租赁

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)
            }

        }