回复于: 2011-02-21 22:26:06 |
HTTP 协议,就像下载一个图片一样。 |
回复于: 2011-05-09 16:57:17 |
楼上正解。获得InputStream后利用BitmapFactory.decodeStream(InputStream is)就可以返回一个Bitmap类型了,然后ImageView.setImageBitmap(Bitmap bm)就ok了 |
URL url = new URL("http://xxx.xxx.xxx.xxx/img/xxx.gif");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
获得InputStream后利用BitmapFactory.decodeStream(InputStream is)返回一个Bitmap类型了,然后ImageView.setImageBitmap(Bitmap bm)
这样做在虚拟机中运行一点问题也没有问题(是连接到我所部署的网络服务器上,并下载其上面的图片),但是放到真机时,却总是等待并黑屏,请问这是怎么回事,该怎么解决
#1 得分:10 回复于: 2012-11-07 10:03:27
这个操作不要放在主线程去实现,要开个线程或异步任务来完成
#2 得分:15 回复于: 2012-11-07 10:35:48
下载图片要耗时,会阻塞UI主线程,会出现你上面黑屏的情况。想要不黑屏,可以新开个线程去执行下载,配合Handler更新UI
#3 得分:5 回复于: 2012-11-07 15:54:23
黑屏是线程卡住了,你访问网络肯定不能在主线程中做的,要另外开线程去做。否则会直接意外退出
#4 得分:5 回复于: 2012-11-08 10:59:04
楼主的程序没有在4.0以上的版本中测试过吧?测试下就会发现根本不能运行.
#5 得分:10 回复于: 2012-11-08 11:25:21
网络请求需要异步的,你都放在主线程里,很影响用户体验的 .
#6 得分:5 回复于: 2012-11-08 11:30:47
引用 4 楼 btyh17mxy 的回复:
楼主的程序没有在4.0以上的版本中测试过吧?测试下就会发现根本不能运行.
3.0以上的就不能运行了
这个要在子线程里去做下载,然后通知Handler更新UI
#8 得分:5 回复于: 2012-11-09 12:27:45
6楼正解!!主线程画UI被你的联网阻塞了,需要开启新的子线程来实现!建议 handler
#9 得分:5 回复于: 2012-11-09 12:46:00
你下载的是gif图片,android 播放对于gif图片,需要应用另外的包GifView来显示。