Создание MediaPlayer внутри цикла

Я пытаюсь создать MediaPlayer в цикле for, чтобы воспроизводить звуки в массиве. Однако приложение запускается с кодом ниже. Что я делаю не так?

val songs = arrayOf(R.raw.c4, R.raw.e4) for (song in songs) { var mediaPlayer = MediaPlayer.create(getApplicationContext(),song) mediaPlayer.prepare() mediaPlayer.setOnPreparedListener { mediaPlayer -> mediaPlayer.start() } } 

// Вот ошибка, я думаю

 11-09 02:25:56.508 7033-7033/com.myapp.app D/MediaPlayer: setSubtitleAnchor in MediaPlayer 11-09 02:25:56.510 7033-7033/com.myapp.app E/MediaPlayer: prepareAsync called in state 8, mPlayer(0x9a2adde0) 11-09 02:25:56.510 7033-7033/com.myapp.app D/AndroidRuntime: Shutting down VM 11-09 02:25:56.510 7033-7033/com.myapp.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.myapp.app, PID: 7033 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.app/com.myapp.app.NoteTrainerActivity}: java.lang.IllegalStateException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method) at android.media.MediaPlayer.prepare(MediaPlayer.java:1184) at com.myapp.app.NoteTrainerActivity.onCreate(NoteTrainerActivity.kt:49) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Конечно, вы получили эту ошибку, почему? Сначала вы должны проверить Документы метода create :

Удобный метод создания MediaPlayer для данного идентификатора ресурса. При успехе, prepare () уже вызван и не должен быть вызван снова.

Вам просто нужно сделать что-то, как показано ниже:

 MediaPlayer mediaPlayer = MediaPlayer.create(this, raw); mediaPlayer.start(); // create is sychronize method, you just need to call it immediately after `create`. 
Intereting Posts