Sunday, April 22, 2012

Android - play sound on button click - Null pointer exception


I am trying to play a sound file on the click of a button. The sound is just 1 sec long. It plays well the first few times I click the button, but after a while it gives a NullPointerException. Here's the code:




button[i].setOnClickListener(new OnClickListener() {
public void onClick(View view) {
mp = MediaPlayer.create(Test.this, R.raw.mysound);
mp.start();
}
});



And here's the exception:




07-29 23:07:27.690: ERROR/AndroidRuntime(10542): Uncaught handler: thread main exiting due to uncaught exception
07-29 23:07:27.710: ERROR/AndroidRuntime(10542): java.lang.NullPointerException
07-29 23:07:27.710: ERROR/AndroidRuntime(10542): at com.example.mypackage.Test$3.onClick(Test.java:270)



Thanks Chris


Source: Tips4all

3 comments:

  1. Thanks you for your answers! Appreciate it!

    Here's how I finally managed to get it work:

    button[i].setOnClickListener(new OnClickListener() {
    public void onClick(View view) {

    mp = MediaPlayer.create(Test.this, R.raw.mysound);
    mp.start();
    mp.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    mp.release();
    }

    });
    }

    });

    ReplyDelete
  2. It might solve your problem,

    button[i].setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
    new Thread(){
    public void run(){
    mp = MediaPlayer.create(Test.this, R.raw.mysound);
    mp.start();
    }
    }.start();
    }
    });

    ReplyDelete
  3. If still your issue not solved then try this as it help me.

    public void playSound(int resources){
    try{
    boolean mStartPlaying = true;
    MediaPlayer mPlayer=null;
    if (mStartPlaying==true){
    mPlayer = new MediaPlayer();

    Uri uri = Uri.parse("android.resource://YOUR_PACKAGENAME/" + resources);
    mPlayer.setDataSource(getApplicationContext(),uri);
    mPlayer.prepare();
    mPlayer.start();
    }
    else{
    mPlayer.release();
    mPlayer = null;
    }
    mStartPlaying = !mStartPlaying;
    }
    catch (IOException e){
    Log.e(LOG_TAG, "prepare() failed");
    }

    // MediaPlayer mp = MediaPlayer.create(SpyMainActivity.this, resources);
    // mp.start();

    }


    Enjoy. :)

    ReplyDelete