2011-01-16 2 views
0

私は音楽を作成しているapp.theアプリはbtns.theアプリは問題なく実行されている16曲を持っているが、私は..ダウンアプリ軍のApp力がダウンsuddently

 super.onCreate(icicle); 
     setContentView(R.layout.main); 
     int[] ids = {R.id.btn,R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btn10, 
       R.id.btn11, R.id.btn12, R.id.btn13, R.id.btn14, R.id.btn15, R.id.btn16 }; 



      for (int i : ids) { 
       b = (Button) findViewById(i); 
       b.setOnClickListener(this); 
      }} 
     //outside of onCreate() 
     @Override 
     public void onClick(View v) { 

      switch(v.getId()) { 
       case R.id.btn: 
        if (mp != null && mp.isPlaying()) mp.stop(); 
        mp = MediaPlayer.create(zoo.this, R.raw.gata); 
        mp.start(); 
        break; 

これを何回もbtnsを押すとアプリケーションが強制的にダウンすると、logCatはmp.start()でNullPointerExceptionを見つけています。アプリを強制的に押し下げるボタンを押すと、ヘルプが表示されます。

EDIT以下のコメントからで:

case R.id.btn: 
    if (mp != null && mp.isPlaying()) mp.stop(); 
    mp.reset(); 
    try { 
     mp.setDataSource("zoo.this,R.raw.gata"); 
    } catch (IllegalArgumentException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IllegalStateException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    mp.start(); 
    break; 
+1

ボタンを押すたびに新しい「MediaPlayer」を作成する必要がありますか?そのクラスは理由のために 'reset()'と 'setDataSource()'メソッドを持っています。 –

+0

申し訳ありませんが、私はアンドロイド開発で新しいです!どうすれば修正できますか? –

+2

[MediaPlayer](http://developer.android.com/reference/android/media/MediaPlayer.html)クラスのドキュメントをご覧ください。 –

答えて

0

私はポイントはMediaPlayerのはかなり重いリソースであり、あなたがそれらのあまりに多くを作成してはならないことだと思います。また、完了したらすぐにrelease()メソッドを呼び出します。 Anonのポイントはどちらも有効です。新しいものを作成するのではなく、メディアの再生を再利用してみるべきです.MediaPlayerのドキュメントを十分に理解しておく必要があります。 MediaPlayerのドキュメントから、例えば:

リソース ソフトウェア実装に フォールバックにMediaPlayerのオブジェクトの後続 インスタンスを引き起こすか、失敗する可能性があり) 呼解放(このようなハードウェアのようなシングルトン リソース 加速度成分及び障害を含むことができます全部。

仮説は、たくさんのMediaPlayerオブジェクトを割り当てているか、またはそれらを十分に速く放たないということです。しかし、コードを追加することなく、特定することは不可能です。

+0

あなたの答えをありがとうが、私はアプリを修正する方法はありますか? –

関連する問題