2011-08-09 12 views
0

私の目標は、Androidアプリケーションを搭載したGoogleアプリケーションエンジンサーバーからイメージをダウンロードすることです。私はそのためにasynctaskを使用します。サーバーはGoogleのアプリケーションエンジンにあり、画像(JPEGファイル)はブロブストアにあります。まず、サーバーがGoogle Chromeブラウザで動作しているかどうかを確認しました。ブラウザで同じURIの画像を見ることができました。だから私のサーバーは正常に動作しています。私の接続にはセッションがあり、それはhttps接続です。私のアプリは画像をドロウアブル(またはビットマップ?)としてダウンロードし、それらから配列を作成し、この配列をギャラリー用のimageadapterに配置する必要があります。問題は、Drawable myImage = Drawable.createFromStream( "Image")を実行したときです。 myImageはnullです。 (私はIf(myImage == null)でこれをチェックします)。ブラウザで画像が表示されるのはなぜですか?コードではnullですか?私がダウンロードしている描画可能なイメージはnullです

PS:私は多くの検索をしましたが、ウェブから画像をダウンロードする方法はたくさんあります。しかし、私はこれがなぜ機能していないのか理解できません。アンドロイド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()'だけでなく、コンテンツの長さもチェックする必要があります。これらの両方がOKであれば、 'BitmapFactory.decodeStream()'を使ってビットマップとしてコンテンツを読み込み、それから 'BitmapDrawable'を作成してください。 –

+0

ありがとう、私は少しアイデアを得る。 Drawableはどういうわけかimage/jpegタイプを受け入れません。タイプと長さは正しいです。しかし、ストリームからビットマップを作成しようとしましたが、ビットマップからBitmapdrawable(実際には描画可能です)が作成されました。再度、感謝します! – Genom

関連する問題