On Click Listener внезапно завершает работу приложения

У меня есть текстовое поле с OnClickListener(). Также всякий раз, когда я набираю алфавит в текстовом поле, он читает его вслух, используя некоторые звуковые файлы. Проблема в том, что после чтения/ввода, скажем, 5-6 алфавитов, приложение неожиданно завершает работу. Я не могу понять причину. Почему это так?

Код здесь:

package com.example.newaa;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
import android.text.Editable;
import android.text.TextWatcher;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;

import android.os.Bundle;

public class Recipient extends Activity{
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.recipient);
            EditText a;
            a=(EditText)findViewById(R.id.editText3);
            a.addTextChangedListener(new TextWatcher(){ 
                @Override   
                public void afterTextChanged(Editable s) {   
                       //GET TEXT HERE AFTER TYPING DONE BY PERSON   

                    }   
                @Override   
                public void beforeTextChanged(CharSequence s,int start,int count,int after){  
                      //GET TEXT HERE BEFORE TYPING START BY PERSON

                    }   
                @SuppressLint("ParserError")
                @Override   
                public void onTextChanged(CharSequence s, int start, int before, int count) {   
                   //GET TYPED CHAR HERE 

                    char ch=s.charAt(s.length()-1);
                    if(ch=='a')
                    {

                        MediaPlayer mPlayer1 = MediaPlayer.create(Recipient.this, R.raw.a);
                        mPlayer1.start();
                    }
                    if(ch=='b')
                    {
                        MediaPlayer mPlayer2 = MediaPlayer.create(Recipient.this, R.raw.b);
                        mPlayer2.start();
                    }
                    if(ch=='c')
                    {
                        MediaPlayer mPlayer3 = MediaPlayer.create(Recipient.this, R.raw.c);
                        mPlayer3.start();
                    }
                    if(ch=='d')
                    {
                        MediaPlayer mPlayer4 = MediaPlayer.create(Recipient.this, R.raw.d);
                        mPlayer4.start();
                    }
                    if(ch=='e')
                    {
                        MediaPlayer mPlayer5 = MediaPlayer.create(Recipient.this, R.raw.e);
                        mPlayer5.start();
                    }
                    if(ch=='f')
                    {
                        MediaPlayer mPlayer6 = MediaPlayer.create(Recipient.this, R.raw.f);
                        mPlayer6.start();
                    }
                    if(ch=='g')
                    {
                        MediaPlayer mPlayer7 = MediaPlayer.create(Recipient.this, R.raw.g);
                        mPlayer7.start();
                    }
                    if(ch=='h')
                    {
                        MediaPlayer mPlayer8 = MediaPlayer.create(Recipient.this, R.raw.h);
                        mPlayer8.start();
                    }
                    if(ch=='i')
                    {
                        MediaPlayer mPlayer9 = MediaPlayer.create(Recipient.this, R.raw.i);
                        mPlayer9.start();
                    }
                    if(ch=='j')
                    {
                        MediaPlayer mPlayer10 = MediaPlayer.create(Recipient.this, R.raw.j);
                        mPlayer10.start();
                    }
                    if(ch=='k')
                    {
                        MediaPlayer mPlayer11 = MediaPlayer.create(Recipient.this, R.raw.k);
                        mPlayer11.start();
                    }
                    if(ch=='l')
                    {
                        MediaPlayer mPlayer12 = MediaPlayer.create(Recipient.this, R.raw.l);
                        mPlayer12.start();
                    }
                    if(ch=='m')
                    {
                        MediaPlayer mPlayer13 = MediaPlayer.create(Recipient.this, R.raw.m);
                        mPlayer13.start();
                    }
                    if(ch=='n')
                    {
                        MediaPlayer mPlayer14 = MediaPlayer.create(Recipient.this, R.raw.n);
                        mPlayer14.start();
                    }
                    if(ch=='o')
                    {
                        MediaPlayer mPlayer15 = MediaPlayer.create(Recipient.this, R.raw.o);
                        mPlayer15.start();
                    }
                    if(ch=='p')
                    {
                        MediaPlayer mPlayer16 = MediaPlayer.create(Recipient.this, R.raw.p);
                        mPlayer16.start();
                    }
                    if(ch=='q')
                    {
                        MediaPlayer mPlayer17 = MediaPlayer.create(Recipient.this, R.raw.q);
                        mPlayer17.start();
                    }
                    if(ch=='r')
                    {
                        MediaPlayer mPlayer18 = MediaPlayer.create(Recipient.this, R.raw.r);
                        mPlayer18.start();
                    }
                    if(ch=='s')
                    {
                        MediaPlayer mPlayer19 = MediaPlayer.create(Recipient.this, R.raw.s);
                        mPlayer19.start();
                    }
                    if(ch=='t')
                    {
                        MediaPlayer mPlayer20 = MediaPlayer.create(Recipient.this, R.raw.t);
                        mPlayer20.start();
                    }
                    if(ch=='u')
                    {
                        MediaPlayer mPlayer21 = MediaPlayer.create(Recipient.this, R.raw.u);
                        mPlayer21.start();
                    }
                    if(ch=='v')
                    {
                        MediaPlayer mPlayer22 = MediaPlayer.create(Recipient.this, R.raw.v);
                        mPlayer22.start();
                    }
                    if(ch=='w')
                    {
                        MediaPlayer mPlayer23 = MediaPlayer.create(Recipient.this, R.raw.w);
                        mPlayer23.start();
                    }
                    if(ch=='x')
                    {
                        MediaPlayer mPlayer24 = MediaPlayer.create(Recipient.this, R.raw.x);
                        mPlayer24.start();
                    }
                    if(ch=='y')
                    {
                        MediaPlayer mPlayer25 = MediaPlayer.create(Recipient.this, R.raw.y);
                        mPlayer25.start();
                    }
                    if(ch=='z')
                    {
                        MediaPlayer mPlayer26 = MediaPlayer.create(Recipient.this, R.raw.z);
                        mPlayer26.start();
                    }
                  }   
                });
     }

}

Логкат здесь:

07-05 08:08:42.153: E/AndroidRuntime(321): Uncaught handler: thread main exiting due to uncaught exception
07-05 08:08:42.183: E/AndroidRuntime(321): java.lang.NullPointerException
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.example.newaa.Recipient$1.onTextChanged(Recipient.java:79)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.widget.TextView.handleTextChanged(TextView.java:6172)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6316)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:578)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174)
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120)
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:231)
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:57)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.os.Looper.loop(Looper.java:123)
07-05 08:08:42.183: E/AndroidRuntime(321):  at android.app.ActivityThread.main(ActivityThread.java:4363)
07-05 08:08:42.183: E/AndroidRuntime(321):  at java.lang.reflect.Method.invokeNative(Native Method)
07-05 08:08:42.183: E/AndroidRuntime(321):  at java.lang.reflect.Method.invoke(Method.java:521)
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-05 08:08:42.183: E/AndroidRuntime(321):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-05 08:08:42.183: E/AndroidRuntime(321):  at dalvik.system.NativeStart.main(Native Method)

person Aakash Anuj    schedule 05.07.2012    source источник
comment
похоже на проблемы с памятью...   -  person C. Leung    schedule 05.07.2012
comment
Поместите свою деталь LogCat, чтобы мы могли выяснить реальную проблему.   -  person Dipali    schedule 05.07.2012
comment
Еще одно... Я не останавливаю медиафайлы с помощью stop(). Это создает проблему?   -  person Aakash Anuj    schedule 05.07.2012
comment
@Candy Это исключение во время выполнения.   -  person Aakash Anuj    schedule 05.07.2012
comment
@AakashAnuj Вы можете поместить свой журнал ошибок для большей ясности.   -  person Dipali    schedule 05.07.2012
comment
@Dipali Я сделал это сейчас.   -  person Aakash Anuj    schedule 05.07.2012
comment
@ParthDoshi Пожалуйста, проверьте logcat и выясните проблему   -  person Aakash Anuj    schedule 05.07.2012
comment
Не могли бы вы вставить код...   -  person Kumar Vivek Mitra    schedule 05.07.2012
comment
@Dipali Код опубликован   -  person Aakash Anuj    schedule 05.07.2012
comment
@KumarVivekMitra Код есть   -  person Aakash Anuj    schedule 05.07.2012
comment
@Candy Теперь, когда я вставил код, можете ли вы сказать мне причину его сбоя после воспроизведения 4-5 звуков?   -  person Aakash Anuj    schedule 05.07.2012
comment
logcat сказал, что у вас есть NullPointerException в строке 79...   -  person C. Leung    schedule 05.07.2012


Ответы (2)


ОТРЕДАКТИРОВАННАЯ ЧАСТЬ.....

Попробуйте освободить медиаплеер, как только звук станет проигрываться... И нет необходимости создавать несколько экземпляров медиаплеера... Повторно инициализируйте тот же самый при запуске..

person Kumar Vivek Mitra    schedule 05.07.2012
comment
Нисколько. Проблема не в этом. Мне нужно знать, почему код вылетает после воспроизведения 4-5 звуковых файлов. - person Aakash Anuj; 05.07.2012
comment
Как отпустить его сразу после того, как он перестал играть? - person Aakash Anuj; 05.07.2012
comment
после запуска подождите 0,5 секунды, а затем отпустите его... используйте sleep() или задержку сообщения обработчика - person Kumar Vivek Mitra; 05.07.2012
comment
Я использовал if (mPlayer != null && mPlayer.isPlaying()) в каждом из операторов if... но все равно выдает ту же ошибку :( - person Aakash Anuj; 05.07.2012

Вы получили ошибку из-за передачи Illegal Activity Context (NULL Context) любому методу или другому действию.

См. Неперехваченный обработчик: основной поток завершается из-за необработанного исключения , у которых аналогичная проблема. Вы можете определить проблемную зону.

person Dipali    schedule 05.07.2012