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の値を確認しましたか?NULL以外ですか?作成できる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 に答える