Android 如果Y已经在播放,如何定义播放Z的按钮?
我的想法是我有一个按钮和两个状态。 1.按下时播放声音Z(来自随机声音列表) 2.第二次按:如果Z,则播放Y 一切似乎都很好,直到我连续按了3次,得到一个nullpointerexception 以下是onClick代码: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
@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;}