当前位置: 首页 > 知识库问答 >
问题:

为什么在尝试实例化Mediaplayer时会出现NullPointerException?Android Kotlin

柯曜文
2023-03-14
package com.oyly.gpsdemo
import android.content.Context
import android.media.MediaPlayer

class SoundGenerator(context: Context) : MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
    private var mediaPlayer:    MediaPlayer = MediaPlayer()
    private var nextSound:      Int = R.raw.coast

    init {
        try { mediaPlayer = MediaPlayer.create(context, R.raw.coast) }
        catch (ex : Exception) { println("lyseoy11: $ex") }
            mediaPlayer.setOnPreparedListener(this)
            mediaPlayer.setOnCompletionListener (this)
    }
        override fun onPrepared(p0: MediaPlayer) {mediaPlayer.start()}
        override fun onCompletion(p0: MediaPlayer?) { playSound() }
        fun queueSound(resid: Int) {
            nextSound = resid
            if (!mediaPlayer.isPlaying) playSound()
        }
        fun playSound() {
            mediaPlayer.reset()
            mediaPlayer.setDataSource(resources.openRawResourceFd(nextSound))
            mediaPlayer.prepareAsync()
        }
}

"mediaPlayer=MediaPlayer.create(上下文, R.raw.coast"行抛出以下异常:

Java语言lang.NullPointerException:尝试调用虚拟方法“android”。所容纳之物资源android。所容纳之物上下文在空对象引用上的getResources()

我已经将这段代码从一个独立的应用程序中转移到另一个应用程序的这个类中。现在它不起作用了,我不明白为什么。MediaPlayer。Create()方法将上下文(我从调用该类的MainActivity类传递)和要播放的音频文件的uri作为参数。它们都不为空。

为什么会出现此异常?

编辑:

创建SoundGenerator的唯一位置是在MainActivity初始值设定项中:

class MainActivity : AppCompatActivity() {
    private             var soundGenerator : SoundGenerator = SoundGenerator(this)
    ...
}

共有1个答案

万俟玉书
2023-03-14

通常,最好等到生命周期的后期设置好后再将活动用作上下文(例如在onCreate中),以避免初始化顺序问题。例如:

class MainActivity : AppCompatActivity() {
    private lateinit var soundGenerator : SoundGenerator

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //...
        soundGenerator = SoundGenerator(this)
    }
}

或者,有时您可以使用application ationContext而不是当前活动作为适当的上下文。

 类似资料:
  • 原关闭原因未解决 这是我的测试类,它的方法使用NullPointer失败。 正如您所看到的,我甚至尝试在方法中正确初始化时钟,但仍然失败。当我启动应用程序时,它按预期工作。 这是时钟豆 这是个例外 java.lang.NullPointerException:时钟

  • 问题内容: 我在以下一行中得到一个: 我正在打印所有值: 输出: 那我为什么要得到呢?请帮助。谢谢。完整的堆栈跟踪如下: 问题答案: 简单的答案:您在该位置没有得到NullpointerException- 至少不是根据您发布的stacktrace。Liferay的LoginAction没有原始的StrutsAction。如果您使用的是6.2 GA5,则这是引发NullpointerExcepti

  • 问题内容: JDBC有问题。 我有以下代码: 我收到以下错误: 我的连接字符串是 jdbc:oracle:oci:@..... Oracle版本为11g。 从错误消息看来,似乎缺少了一些东西,但是: 当我从同一个blob列(带有blob.getBytes)读取时,一切正常。 即时客户端的DLL位于库路径中(正确)。 这是我的类路径中Oracle JDBC JAR的清单: 问题答案: 看起来即使驱动

  • 问题内容: 这是我的代码: 当我执行此操作时,将引发错误: 我确保它不是拼写错误,并且我没有拼错该函数的名称,所以为什么会出现NameError? 问题答案: 除非已定义函数,否则无法调用它。将块移动到文件的顶部,在导入的下面。 某些语言允许您在定义函数之前使用函数。例如,javascript将其称为“吊装”。但是Python并不是这些语言之一。 请注意,只要按 时间顺序 在使用前定义,就可以在比

  • 问题内容: 我在服务器上运行批处理作业时遇到问题,而在开发工作站上的Eclipse上运行良好。 我已经使用Roo设置了Spring环境,创建了一个实体,并进行了一些工作,并在我的develompent盒上对其进行了良好的测试。我初始化上下文并完成工作,但是当我在服务器上运行批处理时,上下文未正确初始化。这是代码: 这是日志和异常: 关于发生了什么任何想法或提示吗?我的类路径设置为$ PROJECT

  • 问题内容: 我刚刚开始学习Java,并且只知道少量的代码,但是,这仍然是一个简单的程序。它更多是一个恶作剧程序,但主要只是为了测试我是否可以创建一个jar文件。 这是代码: 我将其保存到名为的文件中,然后使用进行编译 这有效,当我使用运行它时 它也可以正常工作。 因此,然后我尝试创建一个jar文件。我使用命令 而且有效。之后,我双击jar文件,它出现一个错误。 所以我在cmd中运行它 并得到这个错