如何停止Player1和Play Player2

时间:2014-03-16 20:02:11

标签: android nullpointerexception media-player

我有一个简单的应用程序,但它似乎不是很简单。我想要做的是:当我按下按钮1播放Song1时,如果我按下按钮2 - 则Song1停止而歌曲2播放 如果我只有2个按钮和2首歌曲,我可以做到这一点,但是当我有更多时,我怎么能做到呢? 这是我的代码

    private MediaPlayer mp1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button Bot1 = (Button) findViewById(R.id.button1);
    Button Bot2 = (Button) findViewById(R.id.button2);
    Button Bot3 = (Button) findViewById(R.id.button3);
    Button Bot4 = (Button) findViewById(R.id.button4);
    Bot1.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            if(mp1.isPlaying()) {
                mp1.stop();}
            else
            {   if (mp1.isPlaying()){
                mp1.stop();
                mp1.release(); }

                mp1 = MediaPlayer.create(getApplicationContext(), R.raw.bath);
                mp1.start();
                }
        }
    });
    Bot2.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            if(mp1.isPlaying()) {
                mp1.stop();}
            else
            {   if (mp1.isPlaying())
                mp1.stop();
            mp1.release();
                mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);
                mp1.start();}
        }
    });
    Bot3.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            if(mp1.isPlaying()) {
                mp1.stop();}
            else
            {if (mp1.isPlaying())
                mp1.stop();
            mp1.release();
                mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflush);
                mp1.start();}
        }
    });
    Bot4.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            if(mp1.isPlaying()) {
                mp1.stop();}
            else
            {     if (mp1.isPlaying())
                mp1.stop();
            mp1.release();
                  mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
                  mp1.start();
             } }
            });
    mp1 = MediaPlayer.create(this, R.raw.tolflushs);
    }

3 个答案:

答案 0 :(得分:1)

Button1

mp2.stop();mp3.stop();mp4.stop();

被调用但尚未创建这些MediaPlayers。这就是为什么你要联网null pointer exception

实例化OnClickListener以外的所有MediaPlayers。

另外我建议不要使用4个MediaPlayers,因为你浪费了资源。只创建一个,每次单击一个按钮,检查它是否正在播放,停止,释放它并重新创建它:

if (mp1.isPlaying())
    mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);

答案 1 :(得分:0)

为了避免NullPointerException,如果mp实例不像if ((mp1 != null) && mp1.isPlaying())那样是空的,你可以在你的条件下测试,如果你想管理几个媒体播放器的几个按钮,你可以使用Map。

答案 2 :(得分:0)

好吧,我解决了nullpointexception,在此之后我得到了一个非法的例外,现在我让玩家工作了。我知道哪个是问题,我知道代码是基于逻辑的,但当时我的逻辑效率不高,我睡着了,早上我已经知道了答案:)

  1. 创建了private void stopPlayers()//(编码器会说我疯了:)

        if (mp1.isPlaying()) { mp1.stop(); mp1.reset();}else
    if (mp2.isPlaying()){ mp2.stop(); mp2.reset();}else
    if (mp3.isPlaying()){ mp3.stop(); mp3.reset();}else
    if (mp4.isPlaying()){ mp4.stop(); mp4.reset();}else{ mp1.reset();
    
  2. 在每个OnClickListener中添加stopPlayers()

  3.   

    Bot4.setOnClickListener(new OnClickListener(){

        public void onClick(View v) {
            if(mp4.isPlaying()) {
                mp4.stop();}
            else
            {   
              stopPlayers();
                mp4 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
                  mp4.start();
           } }
            });
       }
    

    就是这样,现在如果我有10个不同的歌曲的10个按钮我可以播放我想要的歌曲,之前的歌曲将停止播放。即使我按下相同的按钮也会停止播放。