2011-06-14 47 views
0

這是我關於我播放音頻文件時得到的異常的問題。在我混亂的文字遊戲應用程序中,我有兩個聲音文件,即。 clap.mp3和oops.mp3。當用戶分別提供正確答案和錯誤答案時播放這些文件。當用戶提供正確答案時,音頻文件clap.mp3被播放並且用戶被提供下一個難題。現在當用戶提供這個難題的錯誤答案時,它應該播放oops.mp3。但是我的應用程序給出了一條ANR消息,要求我「強制關閉」它。請幫幫我。爲什麼MediaPlayer對象發出異常?

代碼:

public void checkWord() 
{ 
    if(abcd.equalsIgnoreCase(etGuessedWord.getText().toString())) 
    { 
     WordLibrary.setMyInt(WordLibrary.getMyInt() + 10); 
     tvScore.setText(String.valueOf(WordLibrary.getMyInt())); 
     mp = MediaPlayer.create(this, R.raw.clap); 
     mp.start(); 
     new AlertDialog.Builder(JumbledWords.this).setMessage("Awesome!!!") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
      wordIdx = (wordIdx + 1) % getSize(); 
      sWord = getScrambledWord(word_list[wordIdx]); 
      tvScrambledWord.setText(sWord); 
      abcd = word_list[wordIdx]; 
      ++word_array_length; 
      mp.stop(); 
      etGuessedWord.setText(""); 

      if(word_array_length >= word_list.length) 
      { 
       new AlertDialog.Builder(JumbledWords.this).setMessage("Level Complete!!! ") 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
        start = 0; 
        finish();   
       } 
       }).create().show();  
      } 


     } 
     }).create().show(); 



    } 
    else 
    { 
     mp = MediaPlayer.create(this, R.raw.oop); 
     mp.start(); 
     new AlertDialog.Builder(JumbledWords.this).setMessage("Wrong. Try Again") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
      mp.stop(); 
      etGuessedWord.setText(""); 
     } 
     }).create().show(); 



    } 
} 


    etGuessedWord.addTextChangedListener(new TextWatcher(){ 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
      if(etGuessedWord.getText().toString().length() == abcd.length()) 
      { 
       checkWord(); 
      } 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, 
       int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 

     } 

    }); 

異常消息

java.lang.NullPointerException 
at com.myambitionconsultants.JumbledWords.checkWord(JumbledWords.java:447) 
at com.myambitionconsultants.JumbledWords$1.afterTextChanged(JumbledWords.java:125) 
at android.widget.TextView.sendAfterTextChanged(TextView.java:6281) 
at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:6504) 
at android.text.SpannableStringBuilder.sendTextHasChanged(SpannableStringBuilder.java:897) 
at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:353) 
at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28) 
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583) 
at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174) 
at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120) 
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:247) 
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:73) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:4701) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
at dalvik.system.NativeStart.main(Native Method) 
+0

什麼是(JumbledWords.java:447)? – Reno 2011-06-14 05:28:58

+0

JumbledWords.java Line 447 mp.start(); – 2011-06-14 05:32:26

回答

0

Hiiii, 尤爾越來越空指針異常意味着你的MediaPlayer可能無法初始化。 所以你必須先初始化。你是否初始化? like,mp = new MediaPlayer();之後,你可以使用

+0

不是。我試圖用這個語句初始化:mp = MediaPlayer.create(this,R.raw.clap); mp.start(); – 2011-06-14 05:38:02

0
mp = MediaPlayer.create(this, R.raw.clap); 

如果媒體播放器對象創建失敗,則返回null。您應該嘗試使用不同的數據源,如oops.mp3。這也可能是device related問題。

+0

沒辦法'因爲,當答案是正確的clap.mp3必須播放。當答案錯誤時,oop.mp3將會播放。我希望兩者都能在正確的情況下播放 – 2011-06-14 05:54:14

+0

我的意思只是爲了測試,如果clap.mp3是您手機可以播放的有效mp3文件。 – Reno 2011-06-14 05:56:16

+0

我也是這麼做的。如果我忽略其中一個mp3文件,它會正確播放。 – 2011-06-14 05:58:20

相關問題