我的目標是使用我的android應用程序從谷歌應用程序引擎服務器下載圖像。我用那個asynctask。服務器位於谷歌應用程序引擎中,圖像(JPEG文件)位於blobstore中。首先,我檢查服務器是否正在使用我的谷歌Chrome瀏覽器。我可以在瀏覽器上看到具有相同URI的圖片。所以我的服務器工作正常。我的連接有一個會話,它是一個https連接。我的應用程序應該下載圖像作爲drawable(或位圖?)並從它們中創建一個數組,並將此數組放入圖庫的圖像適配器中。問題是,當我做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;
}
感謝您的想法!
您是否檢查過與請求一起發送很重要的任何用戶代理字符串? –
正在使用的URI打印在System.out中。我複製了該URI並粘貼在我的瀏覽器上。有效。所以這個URI必須足夠滿足這個請求。也許這是關於會議或https?我不知道:S – Genom