2013-05-21 179 views
1

我在原始文件夾中放置了兩首mp3歌曲。我用兩個按鈕來播放它們。我叫它如下:在mediaplayer中停止和播放mp3

public class Songs extends Activity implements OnClickListener { 

    private Button mBtn1, mBtn2, mBtn3, mBtn4, mBtn5, mBtn6, mBtn7, mBtn8, mBtn9, mBtn10; 
    MediaPlayer mp; 
    boolean playing = false; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.songs); 

     mBtn1 = (Button) findViewById(R.id.button1); 
     mBtn2 = (Button) findViewById(R.id.button2); 

     mBtn1.setOnClickListener(this); 
     mBtn2.setOnClickListener(this); 
    } 


    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     else if (v.getId() == mBtn1.getId()) { 

      if (playing) { 
       mp.stop(); 
       mp.pause(); 
       playing = false; 
      } else { 
       MediaPlayer mp = MediaPlayer.create(Songs.this, R.raw.chahun); 
       mp.start(); 
       playing = true; 
       // mp.release(); 
      } 
     } else if (v.getId() == mBtn2.getId()) { 

      if (playing) { 
       mp.stop(); 
       mp.pause(); 
       playing = false; 
      } else { 
       MediaPlayer mp = MediaPlayer.create(Songs.this, R.raw.sunn); 
       mp.start(); 
       playing = true; 
       // mp.release(); 
      } 

     } 
    } 
} 

但我認爲它是停止歌曲時發生錯誤。我得到錯誤如下:

05-21 11:49:23.006: E/AndroidRuntime(15436): FATAL EXCEPTION: main 
    05-21 11:49:23.006: E/AndroidRuntime(15436): java.lang.NullPointerException 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at com.qwinix.lucia.Songs.onClick(Songs.java:99) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.view.View.performClick(View.java:3517) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.view.View$PerformClick.run(View.java:14155) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.os.Handler.handleCallback(Handler.java:605) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.os.Handler.dispatchMessage(Handler.java:92) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.os.Looper.loop(Looper.java:154) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at android.app.ActivityThread.main(ActivityThread.java:4624) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
    05-21 11:49:23.006: E/AndroidRuntime(15436): at dalvik.system.NativeStart.main(Native Method) 

任何人都可以請解決這個問題嗎? 謝謝

+0

代碼中哪行是99行? – LuigiEdlCarno

回答

1

您have'nt閱讀文件正確,這就是爲什麼你面對這個異常

if (playing) { 

    if (mp != null) { 
     mp.pause(); 
    }  
} 

如果媒體已經在玩。首先對它的null條件進行檢查,然後不要調用stop()方法通過調用pause()來暫停它。

原因除外

之前調用stop()方法,我們必須先暫停媒體。

請參考官方的文檔播放後

public void stop() 

停止播放已停止或暫停。

這很明顯是說暫停意味着要麼通過調用Pause()暫停播放,要麼在完成後停止播放。

http://developer.android.com/reference/android/media/MediaPlayer.html#stop%28%29

Sugesstion - 一個用於調試的貨物方法,我真的遵循的是隻要我得到例外,我開始發現所有可能的原因是例外閹我已經做了所有的事情的正確與否。如果沒有得到解決,那麼我使用讀取生成異常的方法的文檔。

+0

這是工作,但我需要點擊兩次在同一個按鈕來播放歌曲 –

+0

@Aashish J庫馬爾爲什麼你使用兩個按鈕使用用於播放/暫停的單個按鈕並應用單個監聽器。如同查看我更新的帖子。 –

+0

不適用於播放/暫停。我爲兩首不同的歌曲使用了兩個不同的按鈕。現在,當我點擊不同的按鈕,然後它停止歌曲,然後我需要再次點擊它才能播放 –

1

您忘記初始化mp MediaPlayer的實例。所以你需要初始化mp而不是作爲按鈕單擊創建新的:

if (v.getId() == mBtn1.getId()) { 

    if (playing) { 
      ..... 
    } else { 
     mp = MediaPlayer.create(Songs.this, R.raw.chahun); 
      .... 
    } 
} else if (v.getId() == mBtn2.getId()) { 

    if (playing) { 
      ...... 
    } else { 
     mp = MediaPlayer.create(Songs.this, R.raw.sunn); 
      ..... 
    } 

} 

} 
+0

這是工作,但我需要點擊兩次在同一個按鈕播放歌曲 –