Java Android声音池加载()返回null
我正在开发一个Android应用程序,并尝试使用SoundPool在后台播放一些音乐(我知道MediaPlayer会更好,但我真的很想知道如何使用这个类,因为它让我很沮丧)。我正在尝试使用静态音乐类加载两个mp3文件,并将它们的声音ID存储在HashMap中,以便在它们准备好使用时访问它们。然而,将它们放在HashMap中给了我一个NullPointerExceptionJava Android声音池加载()返回null,java,android,audio,multimedia,Java,Android,Audio,Multimedia,我正在开发一个Android应用程序,并尝试使用SoundPool在后台播放一些音乐(我知道MediaPlayer会更好,但我真的很想知道如何使用这个类,因为它让我很沮丧)。我正在尝试使用静态音乐类加载两个mp3文件,并将它们的声音ID存储在HashMap中,以便在它们准备好使用时访问它们。然而,将它们放在HashMap中给了我一个NullPointerException public static void play(Context context, int resource) { i
public static void play(Context context, int resource) {
if (sp == null) {
sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
loaded = true;
}
});
sounds.put(R.raw.main, sp.load(context, R.raw.main, 1));
sounds.put(R.raw.game, sp.load(context, R.raw.game, 1));
am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
float volume = am.getStreamVolume(AudioManager.STREAM_MUSIC) / am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
sp.play(sounds.get(resource), volume, volume, 0, -1, 1.0f);
} else {
float volume = am.getStreamVolume(AudioManager.STREAM_MUSIC) / am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
sp.play(sounds.get(resource), volume, volume, 0, -1, 1.0f);
}
}
具体地说,我在sounds.put(R.raw.main,sp.load(context,R.raw.main,1))行中得到一个NullPointerException代码>
我尝试在加载声音文件后立即使用while循环,循环直到“loaded”为真,但这只会导致应用程序永远挂起。另外,两个mp3文件的大小都不超过400KB,所以我认为它们的大小不是问题。任何帮助都将不胜感激。试试这个
sounds.load(collection.getContext(), R.raw.main, 1);
还是这个方法
int sound_id = mContext.getResources().getIdentifier("myownsound", "raw",
mContext.getPackageName());
soundPool.load(mContext, sound_id, 1);
或者看看这个链接
我不知道第一个建议是如何工作的,因为我没有任何名为collection的变量。我尝试了第二个建议,得到了和以前一样的结果。谢谢您的回复。您是否记得构建您的哈希映射
(或任何声音
是什么)?