2017-11-09 5 views
0

forループ内でMediaPlayerを作成して、配列内のサウンドを再生しようとしています。しかし、アプリケーションは、次のコードで起動時にクラッシュします。私は間違って何をしていますか?forループ内にMediaPlayerを作成

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)  
+2

ここでエラーを貼り付けます。 –

答えて

0

、あなたが得たこのエラーは、なぜだと思いますか?与えられたリソースIDのためのMediaPlayerを作成する

簡易メソッド:最初create方法Docsをチェックする必要があります。成功すると、prepare()はすでに呼び出されており、再度呼び出されてはいけません。

あなたは以下のように何かをする必要があります。

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

ありがとうございました。正常に機能しています。私はDocsを頻繁にチェックする必要があります。 – james

関連する問題