2012-05-04 10 views
4

私はAlertDialogを持っていますが、私がクリックしたときにサウンドの再生を停止しますが、onStop()IllegalStateExceptionをスローするデバイスが表示されます。onStop()を呼び出すとMediaPlayerがスローされる

ダイアログが起動している場合は、サウンドが再生されているため、オーディオが再生されていない場合があります。

私はそれを今のところ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(); 
      } 
     }); 

答えて

1

私はあなたがこれらの行をexecuteing前に、メディアプレーヤーをリリースするかもしれないと思います。私はこのエラーを得たとき、私はこれは下記これはあなたの問題を解決を願っていますように... mp != nullをチェック

if(mp != null) { 
try{ 
     mp.stop(); //error 
     mp.reset(); 
     mp.release(); 
    }catch(Exception e){ 
     Log.d("Nitif Activity", e.toString()); 
     } 
} 
+2

正しい種類の例外に対処していないときに、これが受け入れられた答えです... @tyczj – SMT

+5

@ Deepakの質問と回答は同じ理由ですか? –

3

はどうやらmpは、Dev Resource初期化されていません。追加

試してみてください。

if(mp != null) 
+1

これは、プレイする前に初期化されているため、初期化されないということを意味しません。 – tyczj

+0

@サム - デバイスがサイレントモードのときに質問がありますが、プレーヤーが既に起動している場合、私はif(player!= null){ player.stop();を呼び出して質問します。 player.reset(); player.release(); player = null; }この場合、不正な例外が発生しました。なぜ起こっているのかを調べてください。 –

14

NullPointerExceptionを防止するが、IllegalStateExceptionはそのによって発生することができません。

このエラーが発生するのは、プレーヤーがstop()の状態にないことです。 MediaPlayer documentationの上部にある状態ダイヤグラムを見ると、停止はプレーヤーがPrepared状態になった後でなければ呼び出せないことがわかります。次の可能性は、既にrelease()またはreset()と呼ばれているため、そのエラーが発生する可能性があります。

あなただけPreparedStartedPausedPlaybackCompleteまたはStopped状態でstop()を呼び出すことができます。他のすべての州ではそのエラーが発生します。

prepareAsync()を実行すると、プレイヤーが準備される前にユーザーがボタンを押すか、ボタンを押す前にプレーヤーをリリースまたはリセットするコードがあります。

0

mp!= nullをチェックすると、nullの場合は再生できませんが、mediaplayerは決してnullになりません。 mp = nullを追加するだけです。どこでmp.stop()をやっているのですか?

関連する問題