2013-04-23 6 views
0

J'ai deux boutons. Le premier à démarrer mediaplayer et le second à l'annuler: mediaplayer est en AsyncTask et j'utilise (thread -while) pour le répéter J'ai besoin du mediaplayer pour jouer jusqu'à ce que l'utilisateur appuie sur annuler quand je le lance est en cours d'exécution et quand je presse l'annuler arrête (quand je ne vais pas la page-layout-,)annuler classe AsyncTask dans android

private DoSomething doSomething; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.first); 
final MediaPlayer mp; 
mp=MediaPlayer.create(this,R.raw.ab); 

//=================================================== 
    final Button first=(Button)findViewById(R.id.button1); 
    final Button second=(Button)findViewById(R.id.button2); 
    first.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      //start your asynctask 
      if(doSomething == null || doSomething.isCancelled()){ 
      doSomething = new DoSomething(); 
       doSomething = (DoSomething) doSomething.execute(); 
      } } 
    }); 

    second.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
    doSomething.cancel(true); 

     } });} 

le problème: quand je sors la mise en page et revenir à annuler la AsyncTask il y a aproblem dans

doSomething.cancel(true); 

Parce que le pointeur null le doSomething voir asyntask ne pas en cours d'exécution pendant son exécution

J'utilise Status g=doSomething.getStatus(); il est PENDING pas RUNNING

class DoSomething extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 

     while(true){ 
      if(isCancelled()){ 
       break; 
      } 
      final MediaPlayer mp; 
      mp=MediaPlayer.create(getBaseContext(),R.raw.ab); 


         mp.start(); 
         mp.setOnCompletionListener(new OnCompletionListener() { 

          public void onCompletion(MediaPlayer mp) { 
           mp.release(); 
          } 
         }); 

       try { 
        Thread.sleep(8 * 1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace() }} 
     return null; 
    }} 
+0

pourquoi avez-vous besoin d'un AsyncTask? – pskink

+0

Quelques commentaires: 1. Vous utilisez 2 utilisateurs pour poser une question. C'est vraiment déroutant. 2. Vous devez apprendre à ajouter des commentaires au lieu des réponses à votre question. 3. Postez votre logcat – DigCamara

+0

Regardez ma réponse corrigée – DigCamara

Répondre

0

Le moyen facile de résoudre votre problème est de changer votre deuxième clic pour

second.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      if(doSomething != null && !doSomething.isCancelled()){ 
       doSomething.cancel(true); 
     } 
    }) 
; 
+0

nous pouvons utiliser comme ça aussi http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –