![](/img/trans.png)
[英]Why do I get an UninitializedPropertyAccessException? Android Kotlin
[英]Why do I get NullPointerException when trying to instantiate Mediaplayer? Android Kotlin
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:嘗試在空對象引用上調用虛擬方法“android.content.res.Resources android.content.Context.getResources()”
我已將這段代碼從它工作的獨立應用程序移到另一個應用程序的此類中。 現在它不起作用,我不明白為什么。 MediaPlayer.Create() 方法將上下文(我從調用此類的 MainActivity 類傳遞)和要播放的音頻文件的 uri 作為參數。 它們都不為空。
為什么我會得到這個異常?
編輯:
創建 SoundGenerator 的唯一位置是在 MainActivity Initializer 中:
class MainActivity : AppCompatActivity() {
private var soundGenerator : SoundGenerator = SoundGenerator(this)
...
}
通常最好等到生命周期的后期(例如在onCreate
中)設置好之后才將活動用作上下文,以避免初始化順序問題。 例如:
class MainActivity : AppCompatActivity() {
private lateinit var soundGenerator : SoundGenerator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//...
soundGenerator = SoundGenerator(this)
}
}
或者,有時您可以使用applicationContext
而不是當前活動作為適當的上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.