android java 打开snd,java - Android Soundpool加载到onCreate中导致NullPointerException - 堆栈内存溢出...

编辑:根据要求添加了setOnLoadCompleteListener以及已加载的检查。 即使

我在onCreate期间将六个音效加载到音池中。 当我尝试播放这些声音时,应用程序崩溃,并且出现NullPointerException。 我经历了很多问题和教程,但我只是想不出什么错。 我已经清理了项目,并重新启动了Eclipse。 我知道这些声音文件可以工作,因为我以前让它们作为媒体播放器运行,而且还不错,但是我想将它们放在更合适的声音池中。

如果有人可以指出我犯的错误,那将是一个很大的帮助。 如有必要,将添加所需的更多信息。 感谢您的时间!

代码的相关部分:

public class MainActivity extends Activity {

SoundPool sp;

boolean loaded = false;

int dicesoundId;

int gunfire1soundId;

int smacksoundId;

int cellardoorsoundId;

int grenadesoundId;

int pageturn3soundId;

onCreate:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

sp = new SoundPool(9, AudioManager.STREAM_MUSIC, 0);

sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {

@Override

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

if (status == 0){

loaded = true;

}

}

});

dicesoundId = sp.load(this, R.raw.dice, 1);

gunfire1soundId = sp.load(this, R.raw.gunfire1, 1);

smacksoundId = sp.load(this, R.raw.smack, 1);

cellardoorsoundId = sp.load(this, R.raw.cellardoor, 1);

grenadesoundId = sp.load(this, R.raw.grenade, 1);

pageturn3soundId = sp.load(this, R.raw.pageturn3, 1);

导致nullpointerexception的位置之一的示例:

menuButton1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (musicOn == 1 && loaded) sp.play(pageturn3soundId, 1, 1, 0, 0, 1);

loadPage(button1link);}

}

});

除非用户将其关闭,否则musicOn设置为on。 仅当打开音乐时才会发生崩溃。

奇怪的是,即使我的onPause也会导致应用崩溃:

public void onPause() {

super.onPause();

if (musicOn == 1 && loaded) {

sp.release();

sp = null;

}

}

输入onPause时应用最后一次崩溃时的LogCat:

01-15 18:37:54.823: E/AndroidRuntime(4855): FATAL EXCEPTION: main

01-15 18:37:54.823:E / AndroidRuntime(4855):进程:com.greekwinterproductions.westwarddystopia,PID:4855 01-15 18:37:54.823:E / AndroidRuntime(4855):java.lang.RuntimeException:Unable暂停活动{com .-- cut ---。MainActivity}:java.lang.NullPointerException 01-15 18:37:54.823:E / AndroidRuntime(4855):位于android.app.ActivityThread.performPauseActivity(ActivityThread.java: 3048)01-15 18:37:54.823:E / AndroidRuntime(4855):位于android.app.ActivityThread.performPauseActivity(ActivityThread.java:3003)01-15 18:37:54.823:E / AndroidRuntime(4855):位于android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2981)01-15 18:37:54.823:E / AndroidRuntime(4855):at android.app.ActivityThread.access $ 1000(ActivityThread.java:135)01-15 18 :37:54.823:E / AndroidRuntime(4855):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1207)01-15 18:37:54.823:E / AndroidRuntime(4855):在android.os。 Handler.dispatchMessage(Handler.java:102)01-15 18:37:54.823:E / AndroidRuntime(4855):at android.os.Looper.loop(Looper.java:136)01-15 18:37:54.823:E / AndroidRuntime(4855):at android.app.ActivityThread.main(ActivityThread.java:5001)01-15 18: 37:54.823:E / AndroidRuntime(4855):位于java.lang.reflect.Method.invokeNative(本机方法)01-15 18:37:54.823:E / AndroidRuntime(4855):位于java.lang.reflect.Method invoke(Method.java:515)01-15 18:37:54.823:E / AndroidRuntime(4855):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)01-15 18: 37:54.823:E / AndroidRuntime(4855):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)01-15 18:37:54.823:E / AndroidRuntime(4855):在dalvik.system .NativeStart.main(本机方法)01-15 18:37:54.823:E / AndroidRuntime(4855):原因:java.lang.NullPointerException 01-15 18:37:54.823:E / AndroidRuntime(4855):at com .greekwinterproductions.westwarddystopia.MainActivity.onPause(MainActivity.java:3122)01-15 18:37:54.823:E / AndroidRuntime(4855):at android.app.Activity.performPause(Activity.java:5335)01-15 1 8:37:54.823:E / AndroidRuntime(4855):位于android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1233)01-15 18:37:54.823:E / AndroidRuntime(4855):位于android.app.ActivityThread .performPauseActivity(ActivityThread.java:3034)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值