Android – reproducir sonido al hacer clic en el botón – excepción de puntero nulo

Intento reproducir un archivo de sonido con solo hacer clic en un botón. El sonido tiene solo 1 segundo de duración. Funciona bien las primeras veces que hago clic en el botón, pero después de un tiempo da una NullPointerException . Aquí está el código:

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

Y esta es la excepción:

 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) 

Gracias por tus respuestas! ¡Lo aprecio!

Así es cómo finalmente logré que funcione:

  button[i].setOnClickListener(new OnClickListener() { public void onClick(View view) { mp = MediaPlayer.create(Test.this, R.raw.mysound); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mp.release(); } }); mp.start(); } }); 

También puedes probar:

 final soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); final sound = soundPool.load(this, R.raw.mysound, 1); button[i].setOnClickListener(new OnClickListener() { public void onClick(View view) { soundPool.play(sound, 1.0f, 1.0f, 0, 0, 1.0f); } }); 

Podría resolver su problema,

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

Deberías atrapar Excepción.

prueba este código:

  try{ MediaPlayer mplayer = MediaPlayer.create(contextTop, R.raw.); mplayer.start(); }catch(Exception e){ Log.d("" , "error: " + e); } 

Si aún no se resolvió su problema, intente esto ya que me ayuda.

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

Disfrutar. 🙂