2013-01-01 21 views
1

我想通過一個按鈕點擊http發送一些數據,每次用戶點擊按鈕時應該將一些數據添加到隊列中,然後將通過http發送,在獲得響應後,我想從隊列中移除它,然後對隊列中的下一個項目執行相同操作。在同步任務中調用HTTP多次在android

我知道如何將項目添加到隊列中,並且我嘗試了異步任務來調用http。 問題如果用戶在按鈕上多次點擊,我怎麼才能確保隊列中的下一個項目不會被調用,直到第一個http完成。 而且如果應用程序在後臺也需要完成操作。

這是異步代碼在doInBackground方法:

@Override 
protected Boolean doInBackground(Void... params) { 
try { 
msgResponseIS = getInputStream(generatedLink); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
e.printStackTrace(); 
} 
if (msgResponseIS != null){ 


     BufferedReader r = new BufferedReader(new InputStreamReader(
     msgResponseIS)); 
     StringBuilder total = new StringBuilder(); 
     String line; 
     try { 
      while ((line = r.readLine()) != null) { 
     total.append(line); 
      } 

      setResponseValue(total.toString()); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    return true;} 
    else 
    return false; 
     } 
+1

禁用按鈕仍然會得到迴應.. –

+0

我不能這樣做,根據我的應用程序邏輯,用戶可以多次點擊按鈕發送數據。但請求應該添加到隊列中。並且請求的數目是未定義的。 – Reham

+0

運行進度條仍然可以得到響應。當你得到迴應時,再次開始活動。 –

回答

0

當請求被調用做myButton.setEnabled(false);當HTTP請求完成後,你可以做

myButton.setEnabled(true);

myButton是調用異步任務的按鈕。這樣,只要運行異步任務,您就可以確保用戶不能使用此按鈕。

編輯:其他的方法是做一個boolean free = ture;標誌。當按鈕被點擊時,只需將標誌設置爲free = false;並進行檢查。如果該標誌爲真,則可以進行http調用,否則不能進行調用。

+0

回答他不想禁用按鈕..任何其他方法 –

+0

是的。我在編輯我的答案以適應新的要求 –

+0

看看編輯部分,並讓我知道是否有幫助 –

0

1.在preExecute函數中,您可以像這樣設置可點擊屬性。
Button.setClickable(假)
2.調用doInBackground調用後執行方法和點擊設置爲true後。
Button.setClickable(true);