更新
在搜索了一下后,我似乎并不是唯一一个关于这个问题的人:
http://code.google.com/p/android/issues/detail?id=6066
https://groups.google.com/forum/?fromgroups#!topic/android-beginners/dDnHEacrpCE
ATM有两种解决方案:
1。 (仅在某些情况下有效)在调用静态decodeStream()方法之前,实现Thread.sleep(300)(可能睡眠持续时间值必须更高,但300 ms适用于我)
2。 替换以下内容:
URL pictureurl = new URL("http://www.somewebsite.com/picture15.jpg");
URLConnection urlConn = pictureurl.openConnection();
urlConn.connect();
InputStream urlStream = urlConn.getInputStream();
以下(由imran khan建议):
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();
我接受imran khan的回答,因为这是这篇文章中所有答案的唯一答案。
我的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()”返回null,当我使用来自某个网站的某个图像时,但是当我在浏览器中加载图像时它显示得很好。 我可以使用来自其他网站的其他图像,这些图像会导致方法“decodeStream()”返回预期的Bitmap实例。
我注意到“decodeStream()”方法的方法说明中的以下文字:
“如果输入流为空,或者不能用于解码位图,则该函数返回null ” - 我的输入流非空!
下面的图片导致方法“decodeStream()”返回null:
http://i45.tinypic.com/eah2d2.jpg
以下图片导致方法“decodeStream()”返回预期的位图实例:
我使用的是Android 1.5。
这是Android / Java环境中的错误还是我做错了什么?
答案 0 :(得分: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();
答案 1 :(得分:0)
You need to pass BufferedInputStream.
BufferedInputStream bis = new BufferedInputStream( is );
bmp = BitmapFactory.decodeStream( bis );
所以解码流的代码将是。
InputStream urlStream = urlConn.getInputStream(); // NOT NULL
BufferedInputStream bis = new BufferedInputStream( urlStream );
Bitmap bm = BitmapFactory.decodeStream(bis);
Bitmap bm2 = Bitmap.createScaledBitmap(bm, 100, 100, true);