문제

클릭 리스너에 오디오 파일을 재생하는 버튼이 있습니다. 오디오 파일이 재생되는 동안 버튼이 계속해서 클릭되면 앱이 충돌합니다. 해결책은 무엇입니까?

다음은 참조를위한 코드입니다.

 private OnClickListener btnMercyListener = new OnClickListener()
    {

        public void onClick(View v)
        {                        
           // Toast.makeText(getBaseContext(), 
             //       "Mercy audio file is being played", 
               //       Toast.LENGTH_LONG).show();

            if (status==true)
            {
                mp.stop();
                mp.release();
                status = false;

            } 
            else
            {
            mp = MediaPlayer.create(iMEvil.this,R.raw.mercy); 


          //mp.start();

            try{
                mp.start();
                status= true; 
                //mp.release();
               }catch(NullPointerException e)
               {
                   Log.v("MP error",e.toString());
               }

            }

            mp.setOnCompletionListener(new OnCompletionListener(){ 

                   // @Override 
                   public void onCompletion(MediaPlayer arg0) { 
                      mp.release();
                      status = false;

                   } 
              }

          ); 



        }
    };
도움이 되었습니까?

해결책

두가지:
1. 충돌 사고를 디버깅하고 실패한 위치를 확인하십시오 (라인).
2. 시도/캐치로 전체 진술을 둘러싸고 간단히 잡아 예외.

코드가 실패한 곳에서 예외 나 더 나은 아이디어가 있다면 코드를 고치는 방법에 대한 조언을 제공하는 것이 훨씬 쉬울 것입니다. 사실, 문제를 해결하기위한 조언조차 필요하지 않을 수도 있습니다. 문제를 혼자서 해결하게 될 수 있으며 자신의 성공의 과일을 거두게됩니다.

의견 당 업데이트 :
문서 미디어 플레이어 OP가보고있는 증상이 주어지면 문제가 무엇인지를 나타냅니다.

재생을 중지하려면 전화하십시오 stop(). 나중에 미디어를 재생하려면 reset() 그리고 prepare() 그만큼 MediaPlayer 호출하기 전에 개체 start() 다시. (create() 전화 prepare() 처음으로.)

재생 버튼을 너무 많이 누르면 미디어가 준비된 상태에 있지 않아 예외가 발생할 수 있습니다. 재생 버튼을 비활성화한다는 아이디어는 유효 하며이 상황을 처리해야합니다.

다음은 프로그램이 원하는 일에 대한 설명 코드입니다.

private OnClickListener btnMercyListener = new OnClickListener()
{
    public void onClick(View v)
    {
        if(isPressed)
        {
            return;
        }

        isPressed = true;

        // create your media player
        mp = MediaPlayer.create(iMEvil.this,R.raw.mercy); 

        // set your listener
        mp.setOnCompletionListener(mp.setOnCompletionListener(new OnCompletionListener(){ 

            // @Override 
            public void onCompletion(MediaPlayer arg0) {
                    if(!isPressed)
                    {
                        return;
                    }

                    isPressed = false;

                    // re-enable your play button
                    playButton.enable();

                    // disable the pause button
                    pauseButton.disable();

                    mp.release();
                    mp.prepare();
                } 
            }
        );

        // disable the play button
        playButton.disable();

        // enable the pause button
        pauseButton.enable();

        // start playback
        mp.start();
    }
};

물론 앱이 충돌하지 않도록 적절한 시도/캐치 문을 가져야하지만이 코드는 무엇을 해야하는지에 대한 일반적인 아이디어를 제공해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top