Android 如何停止播放1和播放2

Android 如何停止播放1和播放2,android,nullpointerexception,media-player,Android,Nullpointerexception,Media Player,我有一个简单的应用程序,但它似乎不是很简单。我想做的是:当我按下按钮1播放歌曲1时,如果我按下按钮2,那么歌曲1停止,歌曲2播放 如果我只有两个按钮和两首歌曲,我就可以做到这一点,但如果我有更多的按钮和歌曲,我怎么能做到呢? 这是我的密码 private MediaPlayer mp1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

我有一个简单的应用程序,但它似乎不是很简单。我想做的是:当我按下按钮1播放歌曲1时,如果我按下按钮2,那么歌曲1停止,歌曲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);
    }

为了避免NullPointerException,如果mp实例不是空的,您可以在您的条件下进行测试。
如果((mp1!=null)&&mp1.isPlaying())
,如果您想用多个媒体播放器管理多个按钮,您可以使用一个映射。

当您按下
按钮1

mp2.stop();mp3.stop();mp4.stop();
已调用,但尚未创建这些媒体播放器。这就是为什么会出现
空指针异常

实例化
OnClickListener
s之外的所有MediaPlayer

另外,我建议不要使用4台MediaPlayer,因为这样会浪费资源。仅创建一个按钮,每次单击按钮时,检查按钮是否正在播放、停止、释放并重新创建:

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

好的,我解决了nullpointexception,之后我得到了一个非法状态异常,现在我让播放器工作。我知道问题出在哪里,我知道代码是基于逻辑的,但当时我的逻辑效率不高,我睡着了,第二天早上我脑子里就有了答案:)

  • 创建了私有void stopPlayers()/(程序员会说我疯了:)

  • 在每个OnClickListener中添加stopPlayers()

  • Bot4.setOnClickListener(新的OnClickListener(){


    就这些,现在如果我有10个按钮和10首不同的歌曲,我可以播放我想要的歌曲,上一首歌曲将停止播放。即使我按下相同的按钮,它也将停止播放。

    我添加了if代码,而不是mp1.stop();mp3.stop();mp4.stop();并删除了2,3,4个播放器。它不想播放,我得到NullPointerException您还需要在
    onClickListener
    s的外部实例化MediaPlayer。在
    onCreate()的末尾添加
    mp1=MediaPlayer.create(…)
    too.ok,现在它工作了,但是当我按下另一个按钮时,它就停止了Sound1,如果我再按一次它就会开始播放Sound2man..看看你写的:if(mp1.isplay()){mp1.stop();}else{if(mp1.isplay())这会执行吗?我想你不明白我的意思,我想如果我按下按钮1,声音1应该播放,如果我再次按下,声音1会停止,但如果我不停止,我按下按钮2,声音1应该停止,声音2应该播放,这段代码应该适用于所有按钮:(
        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();
    
        public void onClick(View v) {
            if(mp4.isPlaying()) {
                mp4.stop();}
            else
            {   
              stopPlayers();
                mp4 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
                  mp4.start();
           } }
            });
       }