URLConnection getInputStream()& HttpEntity getContent()

时间:2011-08-22 02:44:21

标签: android inputstream

我尝试从特定网址下载图片,首先我用这种方式获取InputStream:

if (url != null) {
            URLConnection ucon = null;
            try {
                ucon = url.openConnection();
            } catch (IOException e2) {
                e2.printStackTrace();
            }

            if (ucon != null) {
                ucon.setConnectTimeout(CONN_TIMEOUT);
                ucon.setReadTimeout(READ_TIMEOUT);
                try {
                    is = ucon.getInputStream();

效果很好,但是当我尝试从http://111.12.12.232/images/face/bigface/339.gif下载图片时 我无法获得InputStream,但尝试使用:

HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, "UTF-8");

            HttpProtocolParams.setUseExpectContinue(params, false);
            HttpConnectionParams.setConnectionTimeout(params, CONN_TIMEOUT);

            HttpConnectionParams.setSoTimeout(params, READ_TIMEOUT);
            HttpGet getRequest;
            try {
                getRequest = new HttpGet(url.toURI());
                HttpClient client = new DefaultHttpClient(params);
                HttpResponse response = client.execute(getRequest);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();

这种方式可以成功获取InputStream,并可以下载gif。

所以我想知道这两种方法有什么不同? 感谢〜

1 个答案:

答案 0 :(得分:1)

服务器looks like返回图像内容,但也返回404响应代码,表示满足请求的错误。

1.6 Sun/Oracle JDK上,当HttpURLConnection注意到这样的返回代码并且不会尝试返回内容时,它似乎因IOException而失败。我的猜测是Android平台具有相同的行为,您使用的Apache HttpClient库对于服务器错误配置来说更加健壮。