Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理异步任务中的连接超时_Android_Android Asynctask - Fatal编程技术网

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

Android 处理异步任务中的连接超时,android,android-asynctask,Android,Android Asynctask,我有个问题还没有解决,我需要帮助 我制作了一个有时连接到web服务以获取数据的应用程序,我使用异步任务来实现这一点 当用户可以选择是重试还是取消时,我想在连接超时时创建一个警报对话框,如果用户选择重试,它将再次尝试连接 问题是,我不知道应该将警报对话框以及重试和取消的方法放在哪里 我想让asynctask等待用户输入或直到他们选择重试或取消 我尝试使用runOnUiThread进入doinbackground,但警报对话框不会出现,我尝试使用publishProgress()并在onProgre

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

我制作了一个有时连接到web服务以获取数据的应用程序,我使用异步任务来实现这一点

当用户可以选择是重试还是取消时,我想在连接超时时创建一个警报对话框,如果用户选择重试,它将再次尝试连接

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

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

我尝试使用
runOnUiThread
进入doinbackground,但警报对话框不会出现,我尝试使用
publishProgress()
并在
onProgressUpdate
中显示警报对话框,警报对话框会出现,但异步任务仍在继续。如果我使用wait或notify,它会在等待之前给我错误
对象未被线程锁定

除了加入onPostExecute之外,还有什么方法可以实现这一点吗

谢谢你

在onpreexecute中启动progressdialog,并在onpostexecute和if中停止 u在doinbackgroung中以任何原因获取响应null,然后显示警报 在onpostexecute中,从警报对话框操作再次调用asyntask

用这个

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);
//加密密码();
}

只需将您的代码放在这个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();
}

Y不在执行后。从doinbackground返回一个特定值,并签入onpostexecute以抛出对话框