我正在下载的可绘制图像为空

时间:2011-08-09 09:19:02

标签: java android android-asynctask

我的目标是使用我的Android应用程序从谷歌应用引擎服务器下载图像。我用它作为asynctask。该服务器位于谷歌应用引擎中,图像(JPEG文件)位于blobstore中。首先,我检查了服务器是否正在使用我的谷歌浏览器浏览器。我可以在浏览器上看到具有相同URI的图片。所以我的服务器工作正常。我的连接有一个会话,它是一个https连接。我的应用程序应该将图像下载为可绘制(或位图?)并从中创建一个数组,并将此数组放入图库适用于图库。问题是当我做Draw​​able myImage = Drawable.createFromStream(是,“Image”); myImage为null。 (我用if(myImage == null)检查这个)。为什么我的浏览器显示图像但在我的代码中为空?

PS:我进行了很多搜索,但是有很多替代方法可以从网上下载图像。但我无法理解为什么这不起作用。我在android 2.2上运行了代码。

以下是代码:

        URI uri = new URI(URIString);

        HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;

        SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);

        Scheme sch = new Scheme("https", socketFactory, 443);
        httpclient.getConnectionManager().getSchemeRegistry().register(sch);

        HttpGet httpget = new HttpGet(uri);

        System.out.println(httpget.getURI());

        HttpResponse response = httpclient.execute(httpget, myLibrary.localContext);

        HttpEntity entity = response.getEntity();

        InputStream is = entity.getContent();

        Drawable myImage= Drawable.createFromStream(is, "Image");
        entity.consumeContent();

        if (myImage!=null){
            System.out.println("PhotoID " + PhotoID + " is NOT null!");
            return myImage;
        } else {
            System.out.println("PhotoID " + PhotoID + " is null!");
            return null;
        }

感谢您的任何想法!

1 个答案:

答案 0 :(得分:1)

在尝试解析响应实体之前,您应该检查响应的状态。响应的HTTP状态是检查错误的第一个位置。可以使用response.getStatusLine().getStatusCode()进行检查。如果它不是200那么您的HTTP请求就会出现问题,这会导致您的问题。