1

这只是我正在开发的一个简单的android应用程序,它意味着每次单击按钮时都会播放声音....当我以慢速单击按钮时它可以工作,但如果我快速单击按钮总是会崩溃由于运行时错误而导致的速度 - NullPointerException!......我不知道我做错了什么。

public class OSDC_Mini_ProjectActivity extends Activity implements MediaPlayer.OnCompletionListener {

private ImageButton play,pause,stop;
private MediaPlayer mp;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    play = (ImageButton)findViewById(R.id.play);
    pause = (ImageButton)findViewById(R.id.pause);
    stop = (ImageButton)findViewById(R.id.stop);

    play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            play();
        }
    });

    pause.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            pause();
        }
    });

    stop.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            stop();
        }
    });

    setup();
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (stop.isEnabled()) {
        mp.stop();
    }
}

public void onCompletion(MediaPlayer mp) {
    stop();
}

private void play() {
    mp.start();
    play.setEnabled(false);
    pause.setEnabled(true);
    stop.setEnabled(true);
}

private void stop() {
    mp.stop();
    pause.setEnabled(false);
    stop.setEnabled(false);

    try {
        mp.prepare();
        mp.seekTo(0);
        play.setEnabled(true);
    }
    catch (Throwable t) {
        error(t);
    }
}

private void pause() {
    mp.pause();
    play.setEnabled(true);
    pause.setEnabled(false);
    stop.setEnabled(true);
}

private void loadClip() {
    try {
        mp=MediaPlayer.create(this, R.raw.test);
        mp.setOnCompletionListener(this);
    }
    catch (Throwable t) {
        error(t);
    }
}

private void setup() {
    loadClip();
    play.setEnabled(true);
    pause.setEnabled(false);
    stop.setEnabled(false);
}

private void error(Throwable t) {
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder
        .setTitle("報錯啦!")
        .setMessage(t.toString())
        .setPositiveButton("確定", null)
        .show();
}
}
4

1 回答 1

0

在每个方法中添加空检查。仅当 mp 当前未播放任何内容时才开始媒体播放

于 2012-12-23T18:22:28.123 回答