Android学习笔记(十八):ImageView设置网络图片
2016-12-06 17:06
507 查看
方案一:读取网络图片的inputStream,然后传给bitmap,再显示在imageView中,但是实际操作的时候,提示错误:android.os.NetworkOnMainThreadException(是因为现在网络请求不允许在主线程main中执行,要另外开辟一个子线程进行)
下面是出错的将网络图片转成bitmap的方法
下面是修改后的方法:直接开辟一个子线程,然后在里面设置网络图片,并在onCreate中调用该方法即可
或者下面的代码也可以,更简洁点
方案二:摘自stackoverflow
http://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android
然后在oncreate中执行下面的代码
下面是出错的将网络图片转成bitmap的方法
//将网络图片转换成bitmap public Bitmap getHttpBitmap(String url) { URL httpUrl = null; Bitmap bitmap = null; try { httpUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setConnectTimeout(6000); conn.setDoInput(true); conn.setUseCaches(false); InputStream in = conn.getInputStream();//这行报错 bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this,"系统繁忙,请稍后再试",Toast.LENGTH_SHORT).show(); } return bitmap; }
下面是修改后的方法:直接开辟一个子线程,然后在里面设置网络图片,并在onCreate中调用该方法即可
public void setNetworkBitmap() { Runnable networkImg = new Runnable() { @Override public void run() { try { URL httpUrl = new URL(getIntent().getStringExtra("QRCode")); HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setConnectTimeout(6000); conn.setDoInput(true); conn.setUseCaches(false); InputStream in = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (Exception e) { e.printStackTrace(); } } }; new Thread(networkImg).start(); while(bitmap == null) continue; QRImg.setImageBitmap(bitmap); }
或者下面的代码也可以,更简洁点
public void setNetworkBitmap() { Runnable networkImg = new Runnable() { @Override public void run() { try { URL conn = new URL(getIntent().getStringExtra("QRCode")); InputStream in = conn.openConnection().getInputStream(); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (Exception e) { e.printStackTrace(); } } }; new Thread(networkImg).start(); while(bitmap == null) continue; QRImg.setImageBitmap(bitmap); }
方案二:摘自stackoverflow
http://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } }
然后在oncreate中执行下面的代码
new DownloadImageTask(QRImg).execute(getIntent().getStringExtra("QRCode"));
相关文章推荐
- FastCGI进程意外退出,http错误404.3-NotFound 由于扩展配置问题 dll找不到找定的模块等 dz问题总结
- TCPIP协议详解----网络基础知识
- 使用OpenVSwitch、netns构建复杂的虚拟网络
- Android中如何根据图片url路径来获取网络图片
- 网络——解析数据
- http响应代码
- 数字证书原理
- Node.js建立一个超简单的HTTP服务器
- HTTP 网络请求原理
- Eclipse添加tomcat 新建maven webapp jsp报错The superclass "javax.servlet.http.HttpServlet" was not found .
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛总结
- 归纳笔记013:第三方网络请求ASIHTTPRequest的使用
- 图解HTTPS的工作机制
- httpclient线程池,poolinghttpclientconnectionmanager
- 归纳笔记012:第三方网络请求AFNetworking的使用
- TCP建立连接(三次握手)和释放(四次挥手)的详细解释
- 【TensorFlow】tf.nn.local_response_normalization详解,lrn正则法如何计算?
- http应用优化和加速说明-负载均衡
- Httpclient处理摘要认证
- 计算机知识--网络工程师学习路线