2013-05-21 131 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

这是工作,但我需要点击两次在同一个按钮播放歌曲 –