android - 为什么MediaPlayer对象给出异常?

标签 android exception audio media-player

这是我在播放音频文件时遇到的异常问题。在我的文字游戏应用程序中,我有两个声音文件,即。 clap.mp3和oops.mp3。当用户分别提供正确答案和错误答案时,将播放这些文件。当用户提供正确答案时,将播放音频文件clap.mp3,并为用户提供下一个难题。现在,当用户对此难题提供错误答案时,它应该播放oops.mp3。但是我的应用程序给出了ANR消息,要求我“强制关闭”它。请帮我。

代码:

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)

最佳答案

嗨,
您正在获取空指针异常,这意味着您的MediaPlayer可能未初始化。
所以你必须先初始化。你初始化吗?
例如,mp = new MediaPlayer();之后,您可以使用

关于android - 为什么MediaPlayer对象给出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339437/

相关文章:

javascript - Web Audio API,获取两个数组中左/右 channel 的 getByteTimeDomainData。

Java、Android 将参数传递给方法

android - 将值导入另一个类

android - android SDK版本之间的区别

android - 带有背景声音的Android随机背景图片

ios - 限制或扩展播放的样本数量

java - 删除 HTML 实体及其内容

exception - JavaFX:无法设置绑定(bind)值异常

java - 断言某些参数化 vector 会在 JUnit 中抛出异常?

c++ - 在大型应用程序的主体上使用 try catch