1

我有一个尚未解决的问题,我需要帮助

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

当用户可以选择是否要重试或取消时,我想在连接超时时发出警报对话框,如果他们选择重试,它将尝试再次连接

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

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

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

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

谢谢之前

4

3 回答 3

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();
}
于 2013-10-18T11:53:28.753 回答
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);

//加密密码(); }

于 2013-10-18T11:45:11.200 回答
0

在 onpreexecute 中启动 progressdialog 并在 onpostexecute 上停止,如果您在 doinbackgroung 中以任何原因得到响应为空,则在 onpostexecute 中显示警报并从警报对话框操作再次调用 asyntask

于 2013-10-18T11:39:39.720 回答