2013-04-23 4 views
0

У меня есть две кнопки. Первый, чтобы запустить mediaplayer, а второй, чтобы отменить его: mediaplayer находится в AsyncTask, и я использую (thread -while), чтобы повторить его. Мне нужен медиаплеер для воспроизведения, пока пользователь не нажмет на отмену , когда я запустил его, и когда я нажимаю отменить его останавливает (когда я не выхожу на страницу-layout-,)отменить класс AsyncTask в 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); 

     } });} 

проблема: когда я выхожу раскладку и вернуться, чтобы отменить AsyncTask есть aproblem в

doSomething.cancel(true); 

Поскольку нулевой указатель doSomething видит asyntask не запущенным во время его запуска

Я использую Status g=doSomething.getStatus(); это ОЖИДАНИЕ не 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

почему вам нужен AsyncTask? – pskink

+0

Несколько комментариев: 1. Вы используете 2 пользователей, чтобы задать вопрос. Это действительно сбивает с толку. 2. Вам нужно научиться добавлять комментарии вместо ответов на свой вопрос. 3. Отправьте свой логарифм – DigCamara

+0

Посмотрите на мой исправленный ответ – DigCamara

ответ

0

Простой способ для решения вашей проблемы, чтобы изменить свой второй щелчок на

second.setOnClickListener(new OnClickListener() { 

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

, мы можем использовать это также http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

Смежные вопросы