要注意的是:访问网络不能直接放在主线程,要放在另外一个线程里面,如果放在主线程会报android.os.NetworkOnMainThreadException错误
1 public Bitmap getImageFromNet(String uri) { 2 HttpURLConnection conn = null; 3 4 try { 5 // 1.首先将地址转换为Uri 6 // Uri net_uri = Uri.parse(uri); //这种方式是错误的 7 URL url = new URL(uri); 8 9 // 2. 获取网络连接 10 conn = (HttpURLConnection) url.openConnection(); // 这个地方要转换一次,转换为你获取图片的协议连接 11 12 // 3. 设置请求的一些常用的参数 13 conn.setConnectTimeout(30000);// 设置超时 14 conn.setDoInput(true); // 设置请求可以放服务器写入数据 15 conn.setReadTimeout(30000); // 设置连接去读取数据的超时时间 16 // 4.真正请求图片,然后把从网络上请求到的二进制流保存到了inputStream里面 17 conn.connect(); 18 19 // 5.确保链接成功,获取inputStream流 20 if (conn.getResponseCode() == 200) { 21 InputStream in = conn.getInputStream(); 22 // 6. BitMap的图片工厂,创建出一个图片 23 Bitmap bitmap = BitmapFactory.decodeStream(in); 24 return bitmap; 25 } 26 } catch (MalformedURLException e) { 27 e.printStackTrace(); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } finally { 31 // 7. 关闭连接 32 if (null != conn) { 33 conn.disconnect(); 34 } 35 } 36 37 return null; 38 }
根据不同的目的,变化的是第6步,通过获取的流来不同的操作达成目的