gpt4 book ai didi

android - HTTPPost 失败时取消 AsyncTask?

转载 作者:搜寻专家 更新时间:2023-11-01 09:14:27 25 4
gpt4 key购买 nike

当连接到服务器失败时,我试图取消我的 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 建议的那样用 bool 值解决了这个问题。但我还有另一个问题:每次调用 doInBackground() 时,如果找不到服务器,大约需要三分钟才能停止。当它可以到达服务器时一切都很好,但我不能在用户收到任何通知之前花费 3 分钟(我可以做一个后台进程,但仍然有 3 分钟的等待时间也不好)

知道我的代码有什么问题吗?这不可能是正常的,对吧?

最佳答案

doInBackground() 方法返回一个 String 。如果您的 HTTPPost 失败,您可以返回 null .然后在 onPostExecute() 方法中检查你得到了什么,如果 String 是空的,不要做任何你真正想做的事情,成功运行后做你的 UI 工作

希望对您有所帮助。

关于android - HTTPPost 失败时取消 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com