java - Android 2.3.3 媒体播放器出现 NullPointerException

标签 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();
}
}

最佳答案

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

关于java - Android 2.3.3 媒体播放器出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013374/

相关文章:

java - 具有返回语句的良好编程习惯

java - 如何将 C 代码转换为 Java - Java 中的等效指针

Android - 使用全分辨率图像将 ImageView 保存到文件

android - 如何检查 SharedPreferences 中是否存在数据

java - 什么是 NullPointerException,我该如何解决?

Java - 如何使用类型安全枚举作为 switch-case 语句?

java - 以下 ^.*$ 正则表达式匹配什么?

java - IBM Watson 语音到文本集成

java - 为什么 setTableHeader() 方法会抛出 NullPointerException?

android - 当我单击“onmylocation”按钮时,应用程序崩溃