0

アップデート:

少し検索した後、私はこの問題について一人ではないようです:

http://code.google.com/p/android/issues/detail?id=6066

https://groups.google.com/forum/?fromgroups#!topic/android-beginners/dDnHEacrpCE

ATMには2つのソリューションがあります。

1.(場合によってのみ機能します)静的decodeStream()メソッドを呼び出す前に、Thread.sleep(300)を実装します(スリープ期間の値を高くする必要があるかもしれませんが、300ミリ秒で機能します)

2.以下を交換します。

URL pictureurl = new URL("http://www.somewebsite.com/picture15.jpg");
URLConnection urlConn = pictureurl.openConnection();
urlConn.connect();
InputStream urlStream = urlConn.getInputStream();

次のように(イムラン・カーンによって提案されたように):

HttpGet httpRequest = new HttpGet();
httpRequest.setURI(new URI("http://www.somewebsite.com/picture15.jpg"));
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
Bitmap bm = BitmapFactory.decodeStream(bufHttpEntity.getContent());
httpRequest.abort();

したがって、イムラン・カーンの回答を受け入れます。これは、この投稿のすべての回答の中で機能している唯一の回答だからです。


Androidアプリに次のコードがあります。

URL pictureurl = new URL("http://www.somewebsite.com/picture15.jpg");

URLConnection urlConn = pictureurl.openConnection(); // NOT NULL
urlConn.setRequestProperty("Referer", "http://www.somewebsite.com/");
urlConn.connect();
InputStream urlStream = urlConn.getInputStream(); // NOT NULL

Bitmap bm = BitmapFactory.decodeStream(urlStream);
Bitmap bm2 = Bitmap.createScaledBitmap(bm, 100, 100, true);

imageView.setImageBitmap(bm2);

メソッド「decodeStream()」は、特定のWebサイトから特定の画像を使用するとnullを返しますが、ブラウザに画像をロードすると、問題なく表示されます。他のWebサイトからの他の画像を使用して、メソッド「decodeStream()」が期待されるビットマップインスタンスを返すようにすることができます。

「decodeStream()」メソッドのメソッドの説明に次のテキストがあることに気づきました。

"入力ストリームがnullの場合、またはビットマップのデコードに使用できない場合、関数はnullを返します"-入力ストリームはnullではありません

次の図は、メソッド「decodeStream()」がnullを返す結果になります。

http://i45.tinypic.com/eah2d2.jpg

次の図は、メソッド「decodeStream()」が期待されるビットマップインスタンスを返す結果になります。

https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Wiktionary_small.svg/350px-Wiktionary_small.svg.png

私はAndroid1.5を使用しています。

これはAndroid/Java環境のバグですか、それとも何か間違ったことをしていますか?

4

2 に答える 2

3

次のことを試してください:

HttpGet httpRequest = new HttpGet();
httpRequest.setURI(new URI("http://www.somewebsite.com/picture15.jpg"));
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
Bitmap bm = BitmapFactory.decodeStream(bufHttpEntity.getContent());
httpRequest.abort();
于 2012-06-27T12:30:13.003 に答える
0
You need to pass BufferedInputStream.

BufferedInputStream bis = new BufferedInputStream( is );
bmp = BitmapFactory.decodeStream( bis );

したがって、ストリームをデコードするコードは次のようになります。

InputStream urlStream = urlConn.getInputStream(); //NULLではありません

BufferedInputStream bis = new BufferedInputStream( urlStream );
Bitmap bm = BitmapFactory.decodeStream(bis);
Bitmap bm2 = Bitmap.createScaledBitmap(bm, 100, 100, true);
于 2012-06-27T12:32:43.343 に答える