Android 如果Y已经在播放,如何定义播放Z的按钮?

Android 如果Y已经在播放,如何定义播放Z的按钮?,android,audio,media-player,android-mediaplayer,Android,Audio,Media Player,Android Mediaplayer,我的想法是我有一个按钮和两个状态。 1.按下时播放声音Z(来自随机声音列表) 2.第二次按:如果Z,则播放Y 一切似乎都很好,直到我连续按了3次,得到一个nullpointerexception 以下是onClick代码: @Override public void onClick(View view) { if (view.getId() == R.id.goat) { if(Piciu != null) { if

我的想法是我有一个按钮和两个状态。 1.按下时播放声音Z(来自随机声音列表) 2.第二次按:如果Z,则播放Y 一切似乎都很好,直到我连续按了3次,得到一个nullpointerexception

以下是onClick代码:

@Override
    public void onClick(View view) {
        if (view.getId() == R.id.goat) {
            if(Piciu != null) {
                if(mp2.isPlaying()){mp2.stop();mp2.reset();mp2.release();mp2 = null;}
           butGoat.setBackgroundResource(R.drawable.goat96);
            mp3 = MediaPlayer.create(this, R.raw.cow);
            mp3.start();
            butGoat.setBackgroundResource(R.drawable.goat96);
            mp3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
              public void onCompletion(MediaPlayer mp3) {
                butGoat.destroyDrawingCache();
                butGoat.setBackgroundResource(R.anim.clipeala);
                yourAnimation = (AnimationDrawable) butGoat.getBackground();
                yourAnimation.start();  
                 Piciu = null;
              }
              });
              toast.setText("I can`t yell so Fast!");
              toast.setGravity(Gravity.BOTTOM, 0, 0);
              toast.show();
            } else {
                Piciu = mp2;
        butGoat.destroyDrawingCache();
        butGoat.setBackgroundResource(R.drawable.goat96);
        Random r = new Random();
         int Low = 0;
         int High = 16;
         int rndm = r.nextInt(High-Low) + Low; 
         mp2 = MediaPlayer.create(getApplicationContext(),sounds[rndm]);
                mp2.start();
                mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp2) {
                    butGoat.setBackgroundResource(R.anim.clipeala);
                    yourAnimation = (AnimationDrawable) butGoat.getBackground();
                    yourAnimation.start(); 
                     mp2.reset();
                     mp2.release();
                     mp2 = null;
                     Piciu = null;
                }
            }); 
              } 
           }
        }

我只是不明白,如果Z音没有播放,为什么会出现nullpointerexception。

我知道你没有检查mp2!=调用mp2.isPlaying()之前为null:


将其更改为if(Piciu!=null&&mp2!=null),也不确定为什么需要Piciu变量。我会先清除逻辑,然后在代码仍然崩溃时清理代码。

好的,它可以工作,即使我以前在没有Piciu的情况下尝试过。你能告诉我“!=”的意思是“是”?!=意思是“不等于”==意思是“等于”
    if (view.getId() == R.id.goat) {
        if(Piciu != null) {
            if(mp2.isPlaying()){mp2.stop();mp2.reset();mp2.release();mp2 = null;}