Android-单击按钮时播放声音-空指针异常
我试图单击一个按钮来播放声音文件。 声音只有1秒长。 在我单击按钮的前几次,它的播放效果很好,但过一会儿,它会显示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)
5个解决方案
101 votes
感谢您的回答! 欣赏它!
这是我最终设法使其工作的方法:
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();
}
});
Chris answered 2020-08-06T08:21:10Z
24 votes
您也可以尝试:
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);
}
});
Yoav Epstein answered 2020-08-06T08:21:30Z
4 votes
它可能会解决您的问题,
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();
}
});
sohilv answered 2020-08-06T08:21:50Z
1 votes
您应该捕获异常。
试试这个代码:
try{
MediaPlayer mplayer = MediaPlayer.create(contextTop, R.raw.);
mplayer.start();
}catch(Exception e){
Log.d("" , "error: " + e);
}
Vlad answered 2020-08-06T08:22:14Z
0 votes
如果仍然无法解决您的问题,请尝试此操作,因为它可以帮助我。
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();
}
请享用。 :)
Shreyash Mahajan answered 2020-08-06T08:22:39Z