我的目标是使用我的Android应用程序从谷歌应用引擎服务器下载图像。我用它作为asynctask。该服务器位于谷歌应用引擎中,图像(JPEG文件)位于blobstore中。首先,我检查了服务器是否正在使用我的谷歌浏览器浏览器。我可以在浏览器上看到具有相同URI的图片。所以我的服务器工作正常。我的连接有一个会话,它是一个https连接。我的应用程序应该将图像下载为可绘制(或位图?)并从中创建一个数组,并将此数组放入图库适用于图库。问题是当我做Drawable 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;
}
感谢您的任何想法!
答案 0 :(得分:1)
在尝试解析响应实体之前,您应该检查响应的状态。响应的HTTP状态是检查错误的第一个位置。可以使用response.getStatusLine().getStatusCode()
进行检查。如果它不是200
那么您的HTTP请求就会出现问题,这会导致您的问题。