2013-10-18 68 views
1

我有尚未解決的問題,我需要幫助手柄連接超時

我開發的應用有時連接到網絡服務來獲取數據和我做,使用異步任務

我想就連接超時警告對話框時,用戶可以選擇是否要重試或取消,如果他們選擇重試,它會嘗試重新連接

的問題是,我不知道我應該在哪裏把警報對話框和方法重試並取消

我想要的AsyncTask等待用戶輸入或直到他們選擇重試或取消,

我試圖把doinbackground使用runOnUiThread但警告對話框不會出現,我試圖用publishProgress()和顯示alertdialog onProgressUpdate,出現警報對話框,但異步任務繼續進行。如果我用等待或通知它給了我錯誤object not locked by thread before wait

有沒有什麼辦法可以實現這一點,除了把onPostExecute?前onpreexecute

+0

是不是在postexecute。從doinbackground返回一個特定的值,然後檢查onpostexecute以拋出對話框 –

回答

0

開始progressdialog

感謝,並停止對onpostexecute如果 u得到響應無效任何理由doinbackgroung然後onpostexecute顯示警報 和警告對話框再次行動呼籲asyntask

0

使用此

String host = "122.000.135.000"; 

int timeOut = 3000; // I recommend 3 seconds at least 
boolean status; 
try { 
System.out.println("SERVER IS third"); 
status = InetAddress.getByName(host).isReachable(timeOut); 
if(status == true) 
{ 
System.out.println("SERVER IS "+status); 
String UName = libertyID.getText().toString(); 
String Passwrd = password.getText().toString(); 

callAlertDialog(); 
          sendPostRequest(UName,Passwrd); 

// encryptPassword( ); }

2

只需將您的代碼放入此try/catch中,然後找到「Exception type」並根據此顯示您的對話框。

try 
{ 
    int timeout = 3000; 
    URL myURL = //some valid URL 

    AndroidHttpClient = AndroidHttpClient.newInstance("name"); 
    HttpGet httpGet = new HttpGet(myURL.toExternalForm()); 

    HttpParams httpParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout); 
    HttpConnectionParams.setSoTimeout(httpParams, timeout); 

    HttpResponse response = httpClient.execute(httpGet); 

    //... 
} 
catch (SocketTimeoutException e) 
{ 
    e.printStackTrace(); 
} 
catch (ConnectTimeoutException e) 
{ 
    e.printStackTrace(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
}