我有一个问题,我还没有解决,我需要帮助
我做了一个应用程序,有时连接到Web服务以获取数据,我使用异步任务
当用户可以选择是否要重试或取消时,我想在连接超时时建立警告对话框,如果他们选择重试则会尝试重新连接
问题是,我不知道应该在哪里放置警告对话框以及重试和取消的方法
我想让asynctask等待用户输入或直到他们选择重试或取消,
我尝试使用runOnUiThread
放入doinbackground但警报对话框不会出现,我尝试使用publishProgress()
并在onProgressUpdate
中显示alertdialog,出现警告对话框但异步任务继续进行。如果我使用等待或通知它给了我错误object not locked by thread before wait
有没有办法实现这个,除了放入onPostExecute?
之前感谢
答案 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(); }