2010-12-28 14 views
0

私は音楽ボタン付きのアプリケーションを作成しました。エクリプスのエミュレータで問題なく動作していますが、私のSamsung Galaxyをエミュレータとして使用しています。私はBTN押したときにどのbutton..thisは私のlogcatで押します! を[altテキスト]が[1]デバイスで強制終了エラーが発生しましたが、エミュレータではありません

が、これは56から86行

button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v){ 
       if(mp2.isPlaying()==true||mp3.isPlaying()==true||mp4.isPlaying()==true||mp5.isPlaying()==true||mp6.isPlaying()==true||mp7.isPlaying()==true||mp8.isPlaying()==true||mp9.isPlaying()==true||mp10.isPlaying()==true||mp11.isPlaying()==true||mp12.isPlaying()==true) 
         {mp2.stop(); 
         mp3.stop();mp4.stop();mp5.stop();mp6.stop();mp7.stop();mp8.stop();mp9.stop();mp10.stop();mp11.stop();mp12.stop(); 
        try { 
        mp2.prepare(); 
        mp3.prepare(); 
        mp4.prepare(); 
        mp5.prepare();mp6.prepare();mp7.prepare();mp8.prepare();mp9.prepare();mp10.prepare(); 
        mp11.prepare();mp12.prepare(); 

       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
         mp.start(); 
         Toast.makeText(a.this, "Eisai", Toast.LENGTH_SHORT).show(); 

         } 
       else 
       mp.start(); 
       Toast.makeText(a.this, "Eisai sto myalo", Toast.LENGTH_SHORT).show(); 

      }  

     });   
+1

本当にスタックトレースからパッケージ名をブロックしましたか? – Falmarri

答えて

1

から私のコードは、あなたの "場合" ですステートメント行58? (ライン範囲が正しく指定されていると仮定すると、それは正しいはずです)。その行にデバッグブレークポイントを設定し、すべてのmp *変数を調べます。それらのうちの1つがヌルです。参考までに、コードを明確にするために、ArrayList<MediaPlayer>を使用してこれらすべてのMediaPlayerオブジェクトを保存してみてください。

EDIT:ArrayListドキュメントhereがあります。

基本的には:

List<MediaPlayer> mediaPlayers = new ArrayList<MediaPlayer>(); 
//I have no idea how you're currently making the MediaPlayers, 
//so modify accordingly. 
mediaPlayers.add(MediaPlayer.create(Context, Uri)); 

次に、あなただけのようなものを使用することができますの

public void stopAllIfPlaying(ArrayList<MediaPlayer> mps) { 
    for (MediaPlayer mp : mps) { 
     if(mp.isPlaying()) mp.stop(); 
    } 
} 

、代わりにあなたの文と停止のステートメントは、このようなものを使用する場合:

stopAllIfPlaying(mediaPlayers); 

次に、prepareと似たようなことをしてください。

+2

'if(mp2.isPlaying()== true)'もひどいスタイルです。それはちょうど 'if(mp2.isPlaying())'でなければなりません。 == trueは奇妙に見えるだけでなく、メソッド名はそれが返すものについて非常に明確です。 – Falmarri

+0

ええ、そうです。 – kcoppock

+0

私は別のもののためにbtnを押したときにあなたを止めるためにifメソッドを使います。arraylistの使い方を教えていただけますでしょうか?(そして、もし58の場合はメソッドです) –

0

次回スタックトレースをポストすると、NPEが多くなる前に何が起こるかは後で起こります...しかし、Button button = (Button) findViewById(R.id.btn1)がnullを返すことはかなり明白です。 XMLが正しいこと、実際にはボタンがあることを確認してください。

+0

あなたの答えをありがとうが、私のXMLには問題ありません.. –

関連する問題