Android – button点击播放声音 – 空指针exception

我正在试图播放一个声音文件的一个button。 声音只有1秒。 它发挥了前几次我点击button,但一段时间后,它给了一个NullPointerException 。 代码如下:

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

这里是例外:

 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) 

谢谢你的回答! 感谢!

以下是我最终如何实现它的工作:

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

你也可以尝试:

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

这可能会解决你的问题,

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

你应该赶上例外。

试试这个代码:

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

如果仍然没有解决你的问题,那么试试这个,因为它帮助我。

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

请享用。 🙂