Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android声音池加载()返回null_Java_Android_Audio_Multimedia - Fatal编程技术网

Java Android声音池加载()返回null

Java 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

我正在开发一个Android应用程序,并尝试使用SoundPool在后台播放一些音乐(我知道MediaPlayer会更好,但我真的很想知道如何使用这个类,因为它让我很沮丧)。我正在尝试使用静态音乐类加载两个mp3文件,并将它们的声音ID存储在HashMap中,以便在它们准备好使用时访问它们。然而,将它们放在HashMap中给了我一个NullPointerException

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的变量。我尝试了第二个建议,得到了和以前一样的结果。谢谢您的回复。您是否记得构建您的
哈希映射
(或任何
声音
是什么)?