繁体   English   中英

NullPointerException与Android 2.3.3 Mediaplayer

[英]NullPointerException with android 2.3.3 mediaplayer

这只是我正在开发的一个简单的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当前未播放任何内容时,才开始播放媒体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM