2013-05-27 100 views
0

我最近試圖創建一個說「播放」的按鈕,當按下此按鈕時,我想讓它播放音樂,然後將文本更改爲「停止」 ,但它會拋出一個錯誤並退出應用程序。這裏是我的代碼:試圖使用相同的按鈕播放+暫停音樂

 mPlay.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if(ourMusic.isPlaying()){ 
       ourMusic.pause(); 
       mDisplay.setText("Play"); 
      }else{ 
       ourMusic = MediaPlayer.create(MainActivity.this, R.raw.killthenoise); 
       ourMusic.start(); 
       mDisplay.setText("Stop"); 
      } 
     } 
    }); 

所以如果你按下按鈕一次它應該播放,再按一次它應該停止音樂。實際編碼沒有錯誤。 這是我的logcat:http://pastie.org/7970711

我是新來的這個東西,所以我不知道發生了什麼事情太多。任何幫助,將不勝感激。

+0

'if(ourMusic.isPlaying())' - 在這一行上,我們的音樂可能還沒有被實例化。因此,NPE。 – Tushar

+0

你必須顯示更多的代碼,或讓我們知道什麼49行!另外,如果你想停止音樂,那麼使用我們的Music.stop();並在其他你不需要重新創建mediaplayer。只需調用ourMusic.start(); (假設我們的音樂被初始化了) – mario

+0

第49行是 if(ourMusic.isPlaying()){ – HeyAwesomePeople

回答

1

使用這個代替:

@Override 
    public void onClick(View v) { 
     if (ourMusic == null) { 
      ourMusic = MediaPlayer.create(MainActivity.this, R.raw.killthenoise); 
     } 

     if(ourMusic.isPlaying()){ 
      ourMusic.pause(); 
      mDisplay.setText("Play"); 
     }else{ 
      ourMusic.start(); 
      mDisplay.setText("Stop"); 
     } 
    } 

基本上不:

  1. 重新創建ourMusic每次有一個點擊播放
  2. 嘗試使用ourMusic時,不實例化它。
+0

停止和暫停是兩件不同的事情!如果您說Stop但實際上正在暫停,可能會讓用戶感到困惑。 – mario

+0

謝謝。作品。 – HeyAwesomePeople

0

添加一個全局變量boolean flag = false;

if(flag==false) 
     { 
      mp=MediaPlayer.create(this, R.raw.abc); 
      mp.start(); 
      playbutton.setText("Pause"); 
      flag=true; 
     } 
     else if(mp.isPlaying()&&flag==true) 
     { 
      mp.pause(); 
      playbutton.setText("Play"); 
      flag=false; 
     } 

如果您想在您的應用中使用與PLAY/PAUSE相同的按鈕,此代碼將起作用。 希望這有助於。

相關問題