使用android 2.3.3 mediaplayer的NullPointerException

时间:2012-12-23 18:10:44

标签: java android nullpointerexception

这只是我正在开发的一个简单的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();
}
}

1 个答案:

答案 0 :(得分:0)

在每个方法中添加空检查。仅当mp当前没有播放任何内容时才启动媒体播放