2010-12-28 5 views
0

음악 버튼이있는 앱을 만들었습니다. 앱이 Eclipse의 에뮬레이터에서 문제없이 실행되고 있지만 내 삼성 갤럭시를 에뮬레이터로 사용할 때 오류가 발생합니다. 나는 내가 BTN 누를 때 어떤 button..this 내 로그 캣입니다 키를 누릅니다! 를 [대체 텍스트가] [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 * 변수를 검사하십시오. 대부분이 null입니다. 참고로 명확한 코드를 위해 ArrayList<MediaPlayer>을 사용하여 모든 MediaPlayer 객체를 저장하려고 할 수 있습니다.

편집 : 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

나는 arrylist를 사용하는 법을 말해 줄 수 있겠습니까? (그렇다면, if 58은 메소드라면) –

0

다음에 스택 트레이스를 게시 할 때 NPE가 훨씬 더 나아지기 전에 어떤 일이 발생했는지 후에 ... Button button = (Button) findViewById(R.id.btn1)이 null을 반환한다는 것은 꽤 분명합니다. XML이 정확하고 거기에 실제로 버튼이 있는지 확인하십시오.

+0

답변을 주셔서 감사하지만 내 XML에는 문제가 없습니다 .. –