Подтвердить что ты не робот

Android - воспроизведение звука при нажатии кнопки - исключение Null pointer

Я пытаюсь воспроизвести звуковой файл одним нажатием кнопки. Звук длится всего 1 секунду. Он играет хорошо первые несколько раз, когда я нажимаю кнопку, но через некоторое время он дает NullPointerException. Здесь код:

button[i].setOnClickListener(new OnClickListener() {
    public void onClick(View view) {        
        mp = MediaPlayer.create(Test.this, R.raw.mysound);   
        mp.start();
    }
});

И вот исключение:

07-29 23:07:27.690: ERROR/AndroidRuntime(10542): Uncaught handler: thread main exiting due to uncaught exception
07-29 23:07:27.710: ERROR/AndroidRuntime(10542): java.lang.NullPointerException
07-29 23:07:27.710: ERROR/AndroidRuntime(10542):     at com.example.mypackage.Test$3.onClick(Test.java:270)
4b9b3361

Ответ 1

Спасибо за ваши ответы! Цените это!

Вот как мне наконец удалось заставить его работать:

            button[i].setOnClickListener(new OnClickListener() {
                public void onClick(View view) {

                    mp = MediaPlayer.create(Test.this, R.raw.mysound);
                    mp.setOnCompletionListener(new OnCompletionListener() {

                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            // TODO Auto-generated method stub
                            mp.release();
                        }

                    });   
                    mp.start();
                }

            });

Ответ 2

Вы также можете попробовать:

final soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
final sound = soundPool.load(this, R.raw.mysound, 1);

button[i].setOnClickListener(new OnClickListener()
{
     public void onClick(View view)
     {       
         soundPool.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
     }
});

Ответ 3

Это может решить вашу проблему,

button[i].setOnClickListener(new OnClickListener() {
    public void onClick(View view) {     
        new Thread(){
            public void run(){
                mp = MediaPlayer.create(Test.this, R.raw.mysound);   
                 mp.start();
        }.start();
    }
});

Ответ 4

Вы должны поймать Исключение.

попробуйте этот код:

     try{
         MediaPlayer mplayer = MediaPlayer.create(contextTop, R.raw.<your sound>);
         mplayer.start();
     }catch(Exception e){
         Log.d("<your TAG here>" , "error: " + e);
     }

Ответ 5

Если ваша проблема не решена, попробуйте это, поскольку она мне поможет.

    public void playSound(int resources){
        try{
            boolean mStartPlaying = true;
            MediaPlayer  mPlayer=null;
            if (mStartPlaying==true){
                mPlayer = new MediaPlayer();

                Uri uri = Uri.parse("android.resource://YOUR_PACKAGENAME/" + resources);
                mPlayer.setDataSource(getApplicationContext(),uri);
                mPlayer.prepare();
                mPlayer.start();
            } 
            else{
                mPlayer.release();
                mPlayer = null;
            }
            mStartPlaying = !mStartPlaying;
        }
        catch (IOException e){
            Log.e(LOG_TAG, "prepare() failed");
        }

//       MediaPlayer mp = MediaPlayer.create(SpyMainActivity.this, resources);
//       mp.start();

    }

Enjoy.:)