【问题标题】:Music URI null pointer exception in KotlinKotlin 中的音乐 URI 空指针异常
【发布时间】:2020-10-14 03:43:03
【问题描述】:

大家好 已经过了几天了还是不能解决问题,空指针

设置音乐 URI 时出现异常错误“var musicTrack = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,curSong!!)"

enter image description here

 fun PlaySong(){
    mp!!.reset()
    var song = songlist?.get(songPosition!!)
    var curSong = song?.Id


    var musicTrack = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,curSong!!)
    try {
        mp!!.setDataSource(applicationContext,musicTrack!!)
    }catch (e: Exception){
        Log.e("Music Service","Error On Setting Data Source",e)
    }
    mp!!.prepareAsync()
}

【问题讨论】:

  • curSong 很可能为空。如果是,则断言它是非 null 将导致异常。
  • 还是不行兄弟

标签: android kotlin


【解决方案1】:

堆栈跟踪表明问题发生在第 78 行。 mp 可能是 null 并且您正在尝试调用它的方法,猜测。

使用!! 是一个不好的信号,因为这意味着值可能为空,但您没有处理这种可能性并说“相信我,它永远不会为空”。这通常是行不通的!我从经验中知道这一点...

如果您知道mp 永远不会为空,则将其设为不可为空的类型,否则您需要在对它进行任何操作之前对其进行空检查。永远不要使用!!(在极少数情况下你确实需要它,你会知道你需要它,这是规则的例外)

【讨论】:

  • 现在空点没问题,但 mp 只是 Mediaplayer 类,只是声明为全局参数,也在 onCreate view mehtod var mp = MediaPlayer;问题不是调用方法,只是设置 URI,在我提到的代码中没有调用方法购买在 Java 中工作的方式,这个问题是在 Kotlin 创建另一个应用程序时,请再次检查
  • 使用当前代码再次运行它,查看堆栈跟踪并找到显示Caused by kotlin.KotlinNullPointerException 的行,查看显示MainActivity.PlaySong(MainActivity.kt:LINE_NUMBER) 的行,然后将代码发布到该行MainActivity 文件中的编号(如果您使用的是 Android Studio,ctrl+G 会让您跳转到行号)
猜你喜欢
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2019-03-31
  • 2016-09-22
  • 2012-08-02
  • 2013-12-19
相关资源
最近更新 更多