2016-08-18 4 views
2

に連続してサウンドを再生するときには、私がここで問題Playing multiple files in MediaPlayer one after other In androidアプリのクラッシュのMediaPlayer

私はそれを実行すると、3つの音が再生さへの答えとして、次のコードを見つけましたが、その後アプリがメッセージ

を閉じ

残念ながら、アプリケーションは停止しました。

onCompletionメソッドには何かがありますか?

public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener { 

    int[] tracks = new int[3]; 
    int currentTrack = 0; 
    private MediaPlayer mediaPlayer = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tracks[0] = R.raw.p46; 
     tracks[1] = R.raw.p52; 
     tracks[2] = R.raw.p55; 
     mediaPlayer = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
     mediaPlayer.setOnCompletionListener(this); 
     mediaPlayer.start(); 
    } 

    public void onCompletion(MediaPlayer arg0) { 
     arg0.release(); 
     if (currentTrack < tracks.length) { 
      currentTrack++; 
      arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
      arg0.setOnCompletionListener(this); 
      arg0.start(); 
     } 
    } 
+2

私はこれがあなたのifステートメントのエラーだと思います。範囲チェックの後に 'currentTrack'をインクリメントしているため、範囲外の例外が発生します。 – Jack

+0

あなたのonCompletionメソッドの 'arg0.setOnCompletionListener(this);'からエラーが来ていると思いますが、最初の曲の後にエラーがスローされないかどうか確認してください。 –

答えて

3

変更この:へ

public void onCompletion(MediaPlayer arg0) { 
     arg0.release(); 
     if (currentTrack < tracks.length) { 
      currentTrack++; 
      arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
      arg0.setOnCompletionListener(this); 
      arg0.start(); 
     } 
    } 

を:基本的にあなたが最後currentTrackでbecoz ArrayIndexOutofBoundExceptionを取得している

public void onCompletion(MediaPlayer arg0) { 
     arg0.release(); 
     currentTrack++; 
     if (currentTrack < tracks.length) { 

      arg0 = MediaPlayer.create(getApplicationContext(), tracks[currentTrack]); 
      arg0.setOnCompletionListener(this); 
      arg0.start(); 
     } 
    } 

は3であり、そして何の項目はインデックス3すなわち第四項目ではありません

+0

これで問題は解決しましたが、 onCreateからbuttonTappedにコードを再生すると、アプリケーションが再びクラッシュします。 'public void buttonTapped(ビューを表示){ tracks [0] = R.raw.pianoff46; tracks [1] = R.raw.pianoff52; tracks [2] = R.raw.pianoff55; mediaPlayer = MediaPlayer.create(getApplicationContext()、トラック[currentTrack]); mediaPlayer.setOnCompletionListener(this); mediaPlayer.start(); } –

+1

plsが –

+1

の別の問題を解決するのに役立ちましたplsは別の質問を開き、今度はスタックトレースを投稿します –

関連する問題