10

AlertDialogクリックするとサウンドの再生が停止する がありますが、一部のデバイスでは、呼び出しによってonStop()がスローされるように見えますIllegalStateExceptionが、なぜですか?

ダイアログがアップしている場合、それはサウンドが再生されていることを意味するため、オーディオが再生されていない場合です。

今のところtry catchで囲みましたが、これは何が原因でしょうか?

alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                try{
                mp.stop(); //error
                mp.reset();
                mp.release();
                }catch(Exception e){
                    Log.d("Nitif Activity", e.toString());
                }
                v.cancel();

                popupMessage();                 
                finish();
            }
        });
4

4 に答える 4

29

確認することで aがmp != null防止されますが、それによって引き起こされることはありません。NullPointerExceptionIllegalStateException

そのエラーが発生する理由は、プレーヤーができない状態にあるためstop()です。MediaPlayer ドキュメントの上部にある状態図を見ると、プレーヤーがその状態になった後にのみ stop を呼び出すことができることがわかりますPrepared。次の可能性は、すでに呼び出しているrelease()reset()、そのエラーが発生することです。

、、、または状態でstop()のみ呼び出すことができます。他のすべての状態では、そのエラーが発生します。PreparedStartedPausedPlaybackCompleteStopped

したがってprepareAsync()、プレーヤーが準備される前にユーザーがボタンを押すか、ボタンを押す前にプレーヤーを解放またはリセットするコードがあります。

于 2012-05-04T18:35:09.873 に答える
3

これらの行を実行する前に、インスタンスを無効にしている可能性があります。このエラーが発生したとき、最初に null をチェックします。

if (mp != null) {
    try {
        mp.stop(); //error
        mp.reset();
        mp.release();
    } catch(Exception e){
        Log.d("Nitif Activity", e.toString());
    }
}
于 2012-05-04T17:53:38.200 に答える
0

どうやらmp初期化されていません、Dev Resource ;

追加してみてください:

if(mp != null)
于 2012-05-04T17:52:02.673 に答える
0

mp!=null をチェックすると、null の場合は防止されますが、メディアプレーヤーが null になることはありません。mp=null; を追加するだけです。mp.stop(); を実行している場所

于 2017-08-23T10:07:03.953 に答える