2016-08-18 31 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

我認爲這個錯誤來自'arg0.setOnCompletionListener(this);'在你的onCompletion方法中嘗試刪除它,看它是否在第一首歌曲後沒有拋出錯誤 –

回答

3

更改此:

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

到:

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

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

基本上你得到一個ArrayIndexOutofBoundException最後currentTrack becoz爲3,並沒有項目在指數3,即第4項

+0

這解決了這個問題,但現在如果我移動聲音從onCreate播放代碼到buttonTapped,應用程序再次崩潰。 'public void buttonTapped(View view){ tracks [0] = R.raw.pianoff46; tracks [1] = R.raw.pianoff52; tracks [2] = R.raw.pianoff55; mediaPlayer = MediaPlayer.create(getApplicationContext(),tracks [currentTrack]); mediaPlayer.setOnCompletionListener(this); mediaPlayer.start(); } –

+1

請接受答案,如果有幫助 –

+1

這是一個不同的問題,請爲此打開另一個問題,並且這次也要發佈堆棧跟蹤 –