使用HttpURLConnection 完成该功能
- 确定图片的网址
-
发送http请求
URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置连接和读取超时 conn.setConnectTimeout(5000); conn.setReadTimeout(5000); //设置请求方法,注意必须大写 conn.setRequestMethod("GET"); //建立连接,发送get请求 //conn.connect(); //建立连接,然后获取响应吗,200说明请求成功 conn.getResponseCode();
-
服务器的图片是以流的形式返回给浏览器的
//拿到服务器返回的输入流 InputStream is = conn.getInputStream(); //把流里的数据读取出来,并构造成图片 Bitmap bm = BitmapFactory.decodeStream(is);
-
把图片设置为ImageView的显示内容
ImageView iv = (ImageView) findViewById(R.id.iv); iv.setImageBitmap(bm);
- 添加权限
<uses-permission android:name="android.permission.INTERNET"/> |
在2.3.3上是没有问题的,在4.0以后的版本是有问题的。
4.0后网络请求的代码,不可以直接运行在主线程中。会出现
NetworkOnMainThreadException异常
参考代码
public void click(View v){
//下载图片
//1.确定网址
String path = "http://192.168.13.13:8080/dd.jpg";
try {
//2.把网址封装成一个url对象
URL url = new URL(path);
//3.获取客户端和服务器的连接对象,此时还没有建立连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//4.对连接对象进行初始化
//设置请求方法,注意大写
conn.setRequestMethod("GET");
//设置连接超时
conn.setConnectTimeout(5000);
//设置读取超时
conn.setReadTimeout(5000);
//5.发送请求,与服务器建立连接
conn.connect();
//如果响应码为200,说明请求成功
if(conn.getResponseCode() == 200){
//获取服务器响应头中的流,流里的数据就是客户端请求的数据
InputStream is = conn.getInputStream();
//读取出流里的数据,并构造成位图对象
Bitmap bm = BitmapFactory.decodeStream(is);
ImageView iv = (ImageView) findViewById(R.id.iv);
//把位图对象显示至imageview
iv.setImageBitmap(bm);
}
else{
Toast.makeText(MainActivity.this, "请求失败", 0).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}