2013-07-10 68 views
1

我正試圖處理在AsyncTask中的Http請求期間用戶丟失數據連接的情況。目前,AsyncTask將永遠不會執行,如果發生這種情況,應用程序就會停止。我甚至無法檢查isCancelled(),因爲Http請求只是在一個函數調用中停頓,所以我不能實現一個循環或任何東西。在AsyncTask中取消網絡調用

我使用的UI線程以下,但我無法弄清楚如何檢查任務已經從任務中取消:

task = new LoginTask(); 
    task.execute(this, mUsername, mPassword); 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) 
      { 
       task.cancel(true); 
      } 
     } 
    }, 5000); 
+0

在嘗試通過異步任務打開它之前ping位置?看看你有沒有其他可用的接口,除了127.0.0.1? – Shark

+1

不知道如何獲取數據,但大多數網絡/ http調用都支持設置超時。例如'HttpConnectionParams'。 –

+0

@Shark我在進行呼叫之前測試了一個活動連接,但該呼叫需要大約5秒鐘才能執行,並且用戶可能會在此期間失去連接。 – ashishduh

回答

0

由於KSoap 2是用Java編寫的,因此您可以選擇其中一個類並在HttpConnection上手動設置超時。

根據我們之前的討論,您可能必須重寫不會在連接上設置超時的方法,並將其替換爲您自己的方法和超時連接。由於KSoap是open source,應該可以管理!祝你好運。

+0

關於如何取消一個asynctask的好帖子http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

0

爲了停止處理,你會需要在doInBackground()內部對isCancelled()進行檢查。如果您的doInBackground中有合理的地方可以這樣做,您可以添加一條if語句。否則,您應該考慮在http連接上設置超時。