2017-07-20 1 views
0

quand je clique sur le ImageButton il y avait un son. mais j'ai besoin de release() pour que je puisse jouer tout le son du bouton. Mais quand je clique deux fois sur le bouton mon application s'est arrêtée.Comment jouer à nouveau MediaPlayer après la libération()

Voici mon code:

ImageButton btnda = (ImageButton) findViewById(MyActivity.this, R.id.daa); 
    btnda.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final MediaPlayer soundda = MediaPlayer.create(DaftarHuruf.this); 
      soundda.start(); 
      soundda.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       public void onCompletion(MediaPlayer mp) { 
        mp.reset(); 
        mp.release(); 
       } 
      }); 
     } 
    }); 

ici de l'affichage d'erreur du moniteur android:

07-20 13:32:32.053 25594-25594/com.example.john.lontaraapp E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.john.lontaraapp, PID: 25594 
                     java.lang.IllegalStateException 
                      at android.media.MediaPlayer._start(Native Method) 
                      at android.media.MediaPlayer.start(MediaPlayer.java:1177) 
                      at com.example.john.lontaraapp.DaftarHuruf$8.onClick(DaftarHuruf.java:100) 
                      at android.view.View.performClick(View.java:4756) 
                      at android.view.View$PerformClick.run(View.java:19761) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5253) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:949) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:744) 
+0

ne S'il vous plaît pas ajouter _solved_ au titre. En acceptant une réponse à la question, vous dites aux autres que la question est résolue. Je vous remercie. – Bugs

Répondre

0

il suffit de déplacer votre

final MediaPlayer soundda = MediaPlayer.create(this, R.raw.da); 

intérieur onClick() avant

soundda.start(); 

si vous créez un MediaPlayer avant que vous devez jouer, peu importe si vous relâcha, ou pas encore créé.

utilisent également pas this, mais <YourActivityName>.this, parce que vous déplacerez code à l'intérieur OnClickListener et this seront traités comme un objet OnClickListener, et vous avez besoin d'un objet Context

+0

créer (ce, R.raw.ka); Impossible de résoudre la méthode. mon code est-il correct? – Adhiwhit

+0

@Adhiwhit, je ne sais pas, vous n'avez pas montré le code mis à jour. Seulement le 'créer (ceci, R.raw.ka);', qui n'a pas de sens. –

+0

J'ai été mis à jour le code, à partir de mon studio Android, créer (ce, R.raw.ka); est impossible de résoudre la méthode – Adhiwhit

0

Appel release() libère le joueur et les ressources associées. Si vous voulez jouer à nouveau, vous devriez faire: soundda = new MediaPlayer(); et initez-le à nouveau ... alors réglez les auditeurs et ainsi de suite.

+0

où je saisis ce code? Je ai encore confus – Adhiwhit

+0

Après la libération() a été appelé et vous voulez jouer à nouveau – user221256