Почему объект MediaPlayer выдает исключение?

#android #exception #audio #media-player

#Android #исключение #Аудио #Медиаплеер

Вопрос:

Это мой вопрос об исключении, которое я получаю при воспроизведении аудиофайла. В моем игровом приложении Jumbled words у меня есть два звуковых файла, а именно. 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)
  

Комментарии:

1. Что происходит (JumbledWords.java:447)?

2. JumbledWords.java Строка 447 mp.start();

Ответ №1:

Привет, вы получаете исключение с нулевым указателем, это означает, что ваш MediaPlayer, возможно, не инициализирован. итак, вы должны сначала инициализировать. Вы инициализируетесь? например, mp = new MediaPlayer(); после этого вы можете использовать

Комментарии:

1. Нет. Я пытался инициализировать с помощью этого оператора: mp = MediaPlayer.create(это, R.raw.clap); mp.start();

Ответ №2:

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

Возвращает null, если не удалось создать объект media Player. Вам следует попробовать использовать другой источник данных, например oops.mp3. Это также может быть проблемой, связанной с устройством.

Комментарии:

1. Ни в коем случае, потому что, когда ответ правильный, должен воспроизводиться clap.mp3. при неправильном ответе будет воспроизведен файл ооп.mp3. Я хочу, чтобы оба воспроизводились в правильной ситуации

2. Я имел в виду просто для проверки, является ли clap.mp3 допустимым файлом mp3, который может воспроизводиться на вашем телефоне.

3. Я тоже это делал. Если я игнорирую один из файлов mp3, он воспроизводится правильно.

4. mp3-файл, который вы игнорируете, поврежден или не может быть декодирован mediaplayer.

5. Нужны ли мне оба из них для конвертации из mp3 в ogg? ‘Потому что я где-то читал, что лучше хранить файлы в формате ogg в телефоне Android.