2013-04-23 55 views
0

的AsyncTask類我有兩個按鈕。第一個啓動mediaplayer和第二個取消它: mediaplayer是在AsyncTask,我用(線程 - 時間)重複它 我需要mediaplayer播放,直到用戶按下取消 當我開始運行時和我按取消它停止(當我不出去的頁面佈局 - )取消的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(); 還在等待沒有運行

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 2013-04-23 14:52:53

+0

一些評論:1.您正在使用2個用戶提出問題。這真是令人困惑。 2.你需要學習添加評論而不是你的問題的答案。 3.發佈你的logcat – DigCamara 2013-04-23 16:44:36

+0

看看我更正的答案 – DigCamara 2013-04-23 16:55:52

回答

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/ – 2016-06-29 17:13:22