处理异步任务中的连接超时

时间:2013-10-18 11:22:20

标签: android android-asynctask

我有一个问题,我还没有解决,我需要帮助

我做了一个应用程序,有时连接到Web服务以获取数据,我使用异步任务

当用户可以选择是否要重试或取消时,我想在连接超时时建立警告对话框,如果他们选择重试则会尝试重新连接

问题是,我不知道应该在哪里放置警告对话框以及重试和取消的方法

我想让asynctask等待用户输入或直到他们选择重试或取消,

我尝试使用runOnUiThread放入doinbackground但警报对话框不会出现,我尝试使用publishProgress()并在onProgressUpdate中显示alertdialog,出现警告对话框但异步任务继续进行。如果我使用等待或通知它给了我错误object not locked by thread before wait

有没有办法实现这个,除了放入onPostExecute?

之前感谢

3 个答案:

答案 0 :(得分:2)

只需将您的代码放入此try / catch并找到“异常类型”并根据此显示您的对话框。

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();
}

答案 1 :(得分:0)

  

在onpreexecute中启动progressdialog并在onpostexecute上停止,如果   你在doinbackgroung中以任何理由得到响应null然后显示警告   在onpostexecute中并从警报对话框操作再次调用asyntask

答案 2 :(得分: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(); }