试讲的题目HTTP网络编程之下载图片
public class textwill extends Activity{
private ImageView imageView;
private Bitmap bitmap;
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what==1) {
imageView.setImageBitmap(bitmap);
}
};
};
/**
* 首先我要知道,使用URL下载图片是一件耗时的操作,
* 解决耗时操作的办法有 常见一个子线程,或创建一个异步任务、
* 在这里我用的是子线程
*
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
imageView=(ImageView) findViewById(R.id.imageView1);
new Thread(new Runnable() {
@Override
public void run() {
try {
//定义一个URL对象
URL url =new URL("http://p7.qhimg.com/dmt/235_165_/t01b450ad95f830b856.jpg");
//打开一个URL对应的网络输入流
InputStream inputStream = url.openStream();
//因为我们下载的图像是一个字节流,所以我们要用到位图
//我们定义一个位图也就是bitmap,而且我们还需要用if判断一下,如果bitmap不为空的话,我们还需要用handler往主线程发送一个消息。
//让主线程把bitmap显示出来
bitmap = BitmapFactory.decodeStream(inputStream);
if (bitmap !=null) {
handler.sendEmptyMessage(1);
}
//inputStream.close();
//打开手机对应的输出流
OutputStream outputStream = openFileOutput("jiejie.jpg", MODE_WORLD_READABLE);
//在定义一个byte数组,用作缓存,大小我们给它1k;
byte[] buff = new byte[1024];
//在定一个整形的hasRead,用来保护读到字节数,并且用while循环来判断一下数据的大小是否为0,只要大于0则把他写入本地
int hasRead = 0;
while ((hasRead = inputStream.read(buff))>0) {
outputStream.write(buff, 0, hasRead);
}
outputStream.close();
inputStream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}