gpt4 book ai didi

java - Android Soundpool 在 onCreate 中加载导致 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 12:01:07 25 4
gpt4 key购买 nike

编辑:根据要求添加了 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);

导致空指针异常的地方之一的示例:

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 将设置为打开状态。仅当音乐打开时才会发生崩溃。

奇怪的是,即使我的 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.greekwinterproducts.westwarddystopia, PID: 485501-15 18:37:54.823:E/AndroidRuntime(4855):java.lang.RuntimeException:无法暂停 Activity {com.--cut---.MainActivity}:java.lang.NullPointerException01-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): 在 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):在android.os.Looper.loop(Looper.java:136)01-15 18:37:54.823:E/AndroidRuntime(4855):在android.app.ActivityThread.main(ActivityThread.java:5001)01-15 18:37:54.823:E/AndroidRuntime(4855):在java.lang.reflect.Method.invokeNative( native 方法)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): 在 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( native 方法)01-15 18:37:54.823:E/AndroidRuntime(4855):引起:java.lang.NullPointerException01-15 18:37:54.823:E/AndroidRuntime(4855):在com.greekwinterproducts.westwarddystopia.MainActivity.onPause(MainActivity.java:3122)01-15 18:37:54.823:E/AndroidRuntime(4855):在android.app.Activity.performPause(Activity.java:5335)01-15 18: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)

最佳答案

SoundPool 构造函数现已弃用,请改用此示例代码

AudioAttributes attr = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();

pool = new SoundPool.Builder().setAudioAttributes(attr).setMaxStreams(6).build();

这里是API的文档

https://developer.android.com/reference/android/media/SoundPool.Builder.html

关于java - Android Soundpool 在 onCreate 中加载导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27975125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com