2017-08-03 23 views
1

我試圖創建以下功能的的AsyncTask:的Android功能的AsyncTask

private void updateStreamImageRequest() { 
    countDownTimer = new CountDownTimer(10000, 2000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      imageRequest(); 
     } 
     @Override 
     public void onFinish() { 
      countDownTimer.start(); 
     } 
    }; 
} 

我沒有在AsyncTaskand很多知識我很努力,使其工作。 AsyncTask將繼續運行獲取請求。 到目前爲止,我迄今所做的這一點,但它不工作:

public void getImgAsync() { 
    new requestAsyncTask(); 
} 

public class requestAsyncTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     countDownTimer = new CountDownTimer(10000, 2000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       API_StreamImage_Request(); 
      } 
      @Override 
      public void onFinish() { 
       countDownTimer.start(); 
      } 
     }; 
     return null; 
    } 
} 
+0

你能解釋一下你想從你的代碼 –

+0

我想continueally運行一個GET請求來獲取數據 – junikear

+0

每10秒鐘達到什麼樣的?那麼你想從Asynctask獲取數據部分嗎? –

回答

0

所以做這種方式 - 即

10秒運行

創建倒計時。所以它會在10秒後結束。然後在完成方法中調用你的Asynctask在後臺獲取。

countDownTimer = new CountDownTimer(10000, 5000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 

     } 
     @Override 
     public void onFinish() { 
      new requestAsyncTask().execute(); 
     } 
}; 
countDownTimer.start(); 


class requestAsyncTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     countDownTimer.cancel(); 
     countDownTimer.start(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     API_StreamImage_Request(); 
     return null; 
    } 
} 

您可能需要創建倒計時的全局變量,以便您可以將您的AsyncTask類的內部訪問。或者如果你想的話,你甚至可以通過它。

+0

嗨,謝謝我得到一個錯誤:doInBackground()錯過了一個返回語句 – junikear

+0

@junikear已添加。還要注意修改了Asynctask聲明以在第三個參數中傳遞String。如果你有全部作爲虛空,你可以返回零 –

+0

好吧,我現在返回null,我認爲它的工作 – junikear

0

您也可以使用Handler

private int mInterval = 10000; 
private Handler mHandler = new Handler(); 

Runnable requestCaller = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      new requestAsyncTask().execute(); 
     } finally { 
      mHandler.postDelayed(requestCaller, mInterval); 
     } 
    } 
}; 

還是一個Timer

new Timer().scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      new requestAsyncTask().execute(); 
     } 
    },0, 10000);