我正在開發一個音樂應用程式,在播放器活動中,當我嘗試在活動中分配歌曲標題、專輯和封面圖片時,它回傳一個錯誤,即后期初始化變數未初始化,當我洗掉它時它可以正常作業。當我使用 musicList[songPosition].artUri 從歌曲中獲取資訊時出現錯誤。這是我的玩家活動。
import android.media.MediaPlayer
import android.os.Bundle
import android.widget.ImageButton
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.google.android.material.imageview.ShapeableImageView
class musicInterface : AppCompatActivity() {
lateinit var musicList: ArrayList<MusicClass>
var songPosition: Int = 0
var musicPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_music_interface)
val button: ImageButton = findViewById(R.id.backButton)
button.setOnClickListener {
onBackPressed()
}
setLayout()
playSong()
}
private fun setLayout() {
val image: ShapeableImageView = findViewById(R.id.interfaceCover)
val title: TextView = findViewById(R.id.interfaceSongName)
val album: TextView = findViewById(R.id.interfaceArtistName)
Glide
.with(this)
.load(musicList[songPosition].artUri)
.apply(RequestOptions.placeholderOf(R.drawable.image_as_cover).centerCrop())
.into(image)
title.text = musicList[songPosition].title
album.text = musicList[songPosition].artist
}
private fun playSong() {
songPosition = intent.getIntExtra("index", 0)
when (intent.getStringExtra("class")) {
"MusicAdapter" -> {
musicList = ArrayList()
musicList.addAll(MainActivity.songList)
if (musicPlayer == null) musicPlayer = MediaPlayer()
musicPlayer!!.reset()
musicPlayer!!.setDataSource(musicList[songPosition].path)
musicPlayer!!.prepare()
musicPlayer!!.start()
}
}
}
}
錯誤如下。
Process: com.example.music, PID: 25937
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.music/com.example.music.musicInterface}: kotlin.UninitializedPropertyAccessException: lateinit property musicList has not been initialized
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3420)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3559)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:140)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2092)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:264)
at android.app.ActivityThread.main(ActivityThread.java:7593)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property musicList has not been initialized
at com.example.music.musicInterface.getMusicList(musicInterface.kt:14)
at com.example.music.musicInterface.setLayout(musicInterface.kt:42)
at com.example.music.musicInterface.onCreate(musicInterface.kt:27)
at android.app.Activity.performCreate(Activity.java:7805)
at android.app.Activity.performCreate(Activity.java:7794)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3390)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3559)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:140)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2092)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:264)
at android.app.ActivityThread.main(ActivityThread.java:7593)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
有什么建議么。
uj5u.com熱心網友回復:
如果您正確閱讀例外,您可以識別問題。在初始化陣列之前,您正在嘗試在 setLayout() 方法中加載影像。
.load(musicList[songPosition].artUri)
你的陣列初始化寫在 playSong() 的下一個方法呼叫中
musicList = ArrayList()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/521155.html
下一篇:WCF基于xml資料創建端點
