2015-12-29 131 views
0

我要找大概有以下一些提醒,我有一個HttpUtil類(使用率),其中我有我的sendGetRequest-和sendPostRequest方法。 我使用它們執行成功登錄到我要從中獲取一些數據的網站。 現在,我把我的MainActivity這些方法中的AsyncTask:結合GET和POST請求HttpURLConnection的

protected Boolean doInBackground(Void... params) { 
    try { 
      //1. GET request 
       util.sendGetRequest(loginURL, null); 
      //2. Post request 
       util.sendPostRequest(loginURL, null); 
      //3. Final GET request 
       util.sendGetRequest(resultURL, null); 
      // Read stream 
       String[] response = util.readMultipleLinesRespone(); 
        for (String line : response) { 
       System.out.println(line); 
       } 
     } catch (InterruptedException e) { 
      return false; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     } 

我要尋找一個解決方案,使一個等待另一個到結束(1得到再後,終於得到),如果可能的話,我想保持這個util.class完好無損,並且不把所有東西放在Asynctask(doInBackground)中。 這是可能的還是我有錯誤的方法?

您的意見和建議請。

預先感謝您。

回答

1

的方法,我通常使用的是這樣的:

  • 首先,考慮例如使用一個事件像this庫,不僅解耦你的代碼,而且做起來很簡單,通知您的活動,當第一HttpGet請求完成。
  • 接下來,開始您的GET請求,裏面doInBackground,然後一旦這個過程完成後通知您的活動 - 通常裏面onPostExecute
  • 當您的活動,假設你使用EventBus庫,可以執行下一次的AsyncTask這將完成您的下一個任務,如相應地執行POST請求。

使用這種方法應該讓您的生活更加輕鬆 - 特別有助於您瞭解什麼時候完成,因此您可以根據需要繼續下一項任務。

祝你好運!

+0

THX Eenvincible,「事件」是關鍵字的確,不錯的圖書館Thx的信息。 – Simon

+0

我很高興你發現它有幫助西蒙! – Eenvincible

+0

你可以通過顯示一個進度對話框,每當一個操作正在進行像onPreExecute()內部並關閉它onPostExecute - 幫助用戶知道發生了什麼,應該等待 – Eenvincible

0

您可以有兩個AsyncTasks。一個用於獲取和其他郵件。首先執行獲取請求。然後在第一個AsyncTask的onPostExecute中執行第二個在doInBackground()中發送post請求的AsyncTask;

0

你的HttpUtil類應該以某種方式表示接收到響應。 例如,把這個代碼HttpUtil信號操作的結束:

synchronized (this) { 
    done = true; 
    notifyAll(); 
} 

這個代碼將等待操作結束:

while(!util.isDone()) { 
    try { 
    synchronized(util) { util.wait(); } 

    } catch(Exception e) { ... } 
}