============问题描述============
我用下面的代码从服务器端下载了图片,运行在新开的线程中
System.out.println("before bm = " + bm);
String imageUrl1 = "http://10.0.2.2:8080/BBStuServlet/test01_upload_1.jpg";
bm = NetTool.downlodBitmap(imageUrl1);
map2.put("image", bm);
System.out.println("after bm = " + bm);
logcat里有输出: before bm=null 和 after bm = android.graphics.Bitmap@40d20270
然后我就在主线程里给image设置Bitmap
image.setImageBitmap(bm);
downloadBitmap()方法如下:
/*
* 从指定url下载图片
*/
public static Bitmap downlodBitmap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
可是image并没有显示出来该bitmap,这是为什么。明明已经显示下载好了,图片在135K,也不大啊。怎么回事,纠结一天了。
============解决方案1============
因为你执行image.setImageBitmap(bm);时图片并没有下载好,你应该在下载好后给主线程发消息,通知主线程显示图片。
============解决方案2============
用handler更新主线程图片,或者用asynctask这个异步下载图片