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(context,R.raw.coast)"行引发以下异常:
Java语言lang.NullPointerException:try 调用虚拟方法"android".所容纳之物资源android.所容纳之物上下文空对象引用上的getResources()
我已经将这段代码从一个独立的应用程序中移到了另一个应用程序的这个类中.现在它不起作用了,我不明白为什么.MediaPlayer.Create()方法将上下文(我从调用该类的MainActivity类传递)和要播放的音频文件的uri作为参数.它们都不为null.
为什么会出现此异常?
Edit:
创建SoundGenerator的唯一位置是在MainActivity初始值设定项中:
class MainActivity : AppCompatActivity() {
private var soundGenerator : SoundGenerator = SoundGenerator(this)
...
}