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(); }
请享用。 🙂
- Intent.FLAG_ACTIVITY_CLEAR_TASK和Intent.FLAG_ACTIVITY_TASK_ON_HOME之间的区别
- Android:如何更改datepicker分隔线的颜色?
- 如何为androidunit testing提供数据文件
- 如何改变SwitchCompat的轨道颜色
- 如何在NavigationView中自定义项目背景和项目文本颜色?
- 在Spring Webservice中,不能从START_ARRAY标记反序列化对象的实例
- 通知图标与新的Firebase云消息传递系统
- Gradle:执行失败的任务':processDebugManifest'
- 防止USSD对话框并读取USSD响应?