42 votes

Android - Jouer le son au clic d'un bouton - Exception de pointeur nul

J'essaie de jouer un fichier son en cliquant sur un bouton. Le son ne dure qu'une seconde. Il joue bien les premières fois que je clique sur le bouton, mais au bout d'un certain temps, il donne un NullPointerException . Voici le code :

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

Et voici l'exception :

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)

101voto

Chris Points 1839

Merci pour vos réponses ! Je vous remercie !

Voici comment j'ai finalement réussi à le faire fonctionner :

            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();
                }

            });

24voto

Yoav Epstein Points 191

Vous pouvez également essayer :

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);
     }
});

4voto

sohilv Points 862

Cela pourrait résoudre votre problème,

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();
    }
});

1voto

Vlad Points 271

Vous devriez attraper l'exception.

essayez ce code :

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

0voto

iDroid Explorer Points 7726

Si votre problème n'est toujours pas résolu, essayez ceci qui m'a aidé.

    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();

    }

Appréciez. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X