2011-08-09 24 views
0

我的目標是使用我的android應用程序從谷歌應用程序引擎服務器下載圖像。我用那個asynctask。服務器位於谷歌應用程序引擎中,圖像(JPEG文件)位於blobstore中。首先,我檢查服務器是否正在使用我的谷歌Chrome瀏覽器。我可以在瀏覽器上看到具有相同URI的圖片。所以我的服務器工作正常。我的連接有一個會話,它是一個https連接。我的應用程序應該下載圖像作爲drawable(或位圖?)並從它們中創建一個數組,並將此數組放入圖庫的圖像適配器中。問題是,當我做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; 
     } 

感謝您的想法!

+0

您是否檢查過與請求一起發送很重要的任何用戶代理字符串? –

+0

正在使用的URI打印在System.out中。我複製了該URI並粘貼在我的瀏覽器上。有效。所以這個URI必須足夠滿足這個請求。也許這是關於會議或https?我不知道:S – Genom

回答

1

您應該在嘗試解析響應實體之前檢查響應的狀態。響應的HTTP狀態是首先檢查錯誤的地方。可以用response.getStatusLine().getStatusCode()進行檢查。如果它不是200,那麼您的HTTP請求出現問題,並導致您的問題。

+0

我現在檢查它的狀態代碼是200. Wierd ... – Genom

+1

在這種情況下檢查正在返回的內容類型:'entity.getContentType()。getValue()'它應該是一個圖像MIME類型。你還應該檢查內容長度以及'entity.getContentLength()'。如果這些都可以,那麼嘗試使用'BitmapFactory.decodeStream()'作爲位圖讀取內容,然後從中創建一個'BitmapDrawable'。 –

+0

謝謝,我現在有點想法了。不知何故,Drawable不接受圖像/ jpeg類型。類型和長度是正確的。但我試圖從流中創建一個位圖,並從位圖創建一個Bitmapdrawable(它實際上是一個可繪製的),並且它工作正常。再次感謝! – Genom