我有一个按钮播放音频文件在其击的听众。如果按钮被点击一次又一次的话音频文件播放,然后应用程序的崩溃。该解决方案是什么?

这里是一些代码,以供参考:

 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.环绕整个声明有一个尝试/赶上和根本抓住一个 异常.

如果你有一个例外或更好的主意你的代码是失败的,然后,它会更容易得到你的意见如何解决它...事实上,你甚至可能不需要的建议来解决这个问题,你最终可能会解决该问题通过自己,然后你将会收获的果实的自己的成功。

更新每评论:
该文件 媒体播放器 表示可能是什么问题给予的症状运的是看到:

停止播放,呼叫 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