android按钮输出音频,Android-单击按钮时播放声音-空指针异常

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值