我正在尝试在连接到服务器失败时取消我的AsyncTask。我尝试了cancel()
,但onPostExecute()
方法仍然被调用,而不是onCancelled()
。
这就是doInBackground()
中的内容:
protected String doInBackground(String... params) {
Log.i("ping", "doInBackground() started");
DefaultHttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);
HttpResponse response;
HttpEntity entity;
try {
HttpPost post = new HttpPost("http://192.168.1.6/ping/login.php");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", getEmail()));
nvps.add(new BasicNameValuePair("password", getPassword()));
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = client.execute(post);
entity = response.getEntity();
InputStream iStream = entity.getContent();
read(iStream);
iStream.close();
if(entity != null)
entity.consumeContent();
Log.i("ping", "doInBackground() vervolgd");
} catch (Exception e) {
e.printStackTrace();
Log.e("tvsping", "Exception: " + e.getMessage());
cancel(true);
}
return null;
}
我正试图看看无法联系到服务器时会发生什么(我正在关闭服务器,所以我的电话无法获得任何响应)我得到IOException: the connection was reset
。
我应该如何检查是否未建立连接?
更新 我像Tanmay建议的那样解决了这个问题,用布尔值。但我有另一个问题: 每次调用doInBackground()时,如果找不到服务器,则需要大约三分钟才能停止。当它可以到达服务器时一切都很好,但我不能在用户收到任何通知之前花3分钟(我可以做后台处理,但仍然是3分钟的wating吧也不好)
任何想法我的代码有什么问题?这不正常,对吧?
答案 0 :(得分:3)
从doInBackground()
方法返回String
。如果null
失败,您可以返回HTTPPost
。然后在onPostExecute()
方法中查看内容是什么你得到的,如果String
为空,不做你真正想要的任何事情,并且在成功运行时你的UI工作
希望这会对你有所帮助。
答案 1 :(得分:0)
HttpHost target = new HttpHost("192.168.2.3", 80);
HttpPost post = new HttpPost("/ping/login.php");
response = client.execute(target, post);
这解决了我对服务器响应缓慢的问题。