0

这是我的代码:

MediaPlayer a1,a2,a3...a24;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.a);
    a1 = MediaPlayer.create(this, R.raw.a1);
    a2 = MediaPlayer.create(this, R.raw.a2);
    a3 = MediaPlayer.create(this, R.raw.a3);
             ...
    a24 = MediaPlayer.create(this, R.raw.a24);
}

private void play(MediaPlayer p) {
    p.start();
}

问题是,如果我在玩 a1、a2、a3 一切都是正确的,但如果我在玩 a24,我会得到 NullPointerException。24个音频文件的大小约为25Kb,所以我认为不是内存消耗的问题。我曾尝试在开始游戏之前延迟一些时间,但似乎没有任何帮助。android 文档对此并没有太多解释;我该怎么办?

4

2 回答 2

0

在调用 create() 之后,你真的检查过 a24 的值吗?它是非空的吗?我认为您遇到了可以创建的 MediaPlayer 对象数量的限制。这里有一篇关于 MediaPlayer 和 SoundPool 的精彩文章:http: //www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-problems/

于 2012-05-14T13:32:44.833 回答
0

要回答您的评论:

MediaPlayer mp = new MediaPlayer();

AssetFileDescriptor descriptor;

descriptor = getAssets().openFd( "track name" ); 
mp.setDataSource(     descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength() ); 
descriptor.close(); 
mp.setLooping(false); 
mp.prepare();
mp.start();

您需要重新设置下一次并重新设置才能再次播放。

于 2012-05-14T16:41:22.643 回答