2011-07-20 14 views
0

私は同じ正確なコードを.wavファイルと一緒に使用していました。これは約50回の演奏でうまくいってからクラッシュしました。私はmp3ファイルに切り替え、彼らはまったく再生されません。私はそれがlot--だ知っているが、それは右、大丈夫でなければなりませんので、それらは、静的メソッドの呼び出しですなぜmp3を強制的にクラッシュさせるのですか?

case R.id.playButton: 
     switch (korean.getIndex()){ 
     case -1: break; // This is the case when the program first starts. 
     case 0: MediaPlayer.create(this, R.raw.c0).start(); break; 
     case 1: MediaPlayer.create(this, R.raw.c1).start(); break; 
     case 2: MediaPlayer.create(this, R.raw.c2).start(); break; 
     case 3: MediaPlayer.create(this, R.raw.c3).start(); break; 
     case 4: MediaPlayer.create(this, R.raw.c4).start(); break; 
     case 5: MediaPlayer.create(this, R.raw.c5).start(); break; 
     case 6: MediaPlayer.create(this, R.raw.c6).start(); break; 
     case 7: MediaPlayer.create(this, R.raw.c7).start(); break; 
     case 8: MediaPlayer.create(this, R.raw.c8).start(); break; 
     case 9: MediaPlayer.create(this, R.raw.c9).start(); break; 
     case 10: MediaPlayer.create(this, R.raw.c10).start(); break; 
     case 11: MediaPlayer.create(this, R.raw.c11).start(); break; 
     case 12: MediaPlayer.create(this, R.raw.c12).start(); break; 
     case 13: MediaPlayer.create(this, R.raw.c13).start(); break; 
     case 14: MediaPlayer.create(this, R.raw.v14).start(); break; 
     case 15: MediaPlayer.create(this, R.raw.v15).start(); break; 
     case 16: MediaPlayer.create(this, R.raw.v16).start(); break; 
     case 17: MediaPlayer.create(this, R.raw.v17).start(); break; 
     case 18: MediaPlayer.create(this, R.raw.v18).start(); break; 
     case 19: MediaPlayer.create(this, R.raw.v19).start(); break; 
     case 20: MediaPlayer.create(this, R.raw.v20).start(); break; 
     case 21: MediaPlayer.create(this, R.raw.v21).start(); break; 
     case 22: MediaPlayer.create(this, R.raw.v22).start(); break; 
     case 23: MediaPlayer.create(this, R.raw.v23).start(); break; 
     default: break; 
     } 

プログラム自体は、私は、エラーが下に、この場合に発生する知っているfine--に動作しますか?なぜこのクラッシュでしょうか?

+3

おかしい、あなたはGoogleが知っていると思う... –

答えて

4

あなたはMediaPlayerのを作成次々オブジェクトとリソースを解放することはありません、あなたはおそらく考慮し、メモリが不足しているので:

// declare mp as class field. 
MediaPlayer mp = null; 

//... 

case R.id.playButton: 
    if (mp != null) 
     mp.release(); 
    switch (korean.getIndex()){ 
    case -1: break; // This is the case when the program first starts. 
    case 0: mp = MediaPlayer.create(this, R.raw.c0);mp.start(); break; 
    case 1: mp = MediaPlayer.create(this, R.raw.c1);mp.start(); break; 
    case 2: mp = MediaPlayer.create(this, R.raw.c2);mp.start(); break; 
    // and so on 

また、あなたはset OnCompletionListenerことができ、そこreleaseを呼び出します。

+0

私はちょうど試みた - それはまだ強制的にクラッシュする。 –

+0

'mp'はメソッドではなくクラスフィールドとして宣言されていますか?また、私が今追加した2番目のオプションを考えてみましょう。 – MByD

+0

申し訳ありません - 私は問題はmp3のエンコーディングと何らかの形で学んでいます。このソリューションはwavファイルには完全に機能しますが、何らかの理由でmp3が機能しません。編集:私はプライベートクラスメンバー(リスナーが同じクラス)としてmpを宣言しました。 –

関連する問題