HTTPPost失败时取消AsyncTask?

时间:2011-04-21 11:54:25

标签: android http-post android-asynctask

我正在尝试在连接到服务器失败时取消我的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吧也不好)

任何想法我的代码有什么问题?这不正常,对吧?

2 个答案:

答案 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);

这解决了我对服务器响应缓慢的问题。