92故宫灵异事件图片,网络红人小凡,十大灵异照片
android下载网络图片的流程是:
发送网络请求->将图片以流的形式下载下来->将流转换为bitmap并赋给imageview控件。
注意点
设计思路
1.网络请求:该例中需要下载的文件类型是图片类型,可以将网络请求获取的数据类型转换为bitmap已供imageview直接使用,但是一个合理的网络请求类的设计是将下载的数据类型转换为最基本的inputstream,这样不管是下载图片,音频,文本还是视频,都可以将结果抛出去让上层的逻辑来处理。
2.异步请求:下载图片,网络下载属于耗时操作,所以需要封装一个asynctask来处理网络请求,该请求继承自runnable接口。
3.异步回调:前台需要通过回调的方式来得到图片源,并将该图片源赋值给imageview.
相关代码
netservice:网络请求服务类
public class netservice { public static inputstream getinputstreambyurl(string address){ url url = null; httpurlconnection urlconnection = null; try { url = new url(address); urlconnection = (httpurlconnection) url.openconnection(); urlconnection.setconnecttimeout(2 * 1000); urlconnection.setrequestmethod("get"); return urlconnection.getinputstream(); } catch (ioexception e) { e.printstacktrace(); } return null; } }
netservicetask:asynctask类
import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.asynctask; import java.io.bufferedinputstream; import java.io.inputstream; public class netservicetask extends asynctask public netservicetask(string address, urlposthandler urlposthandler) { this.address=address; this.urlposthandler=urlposthandler; } /** * 表示任务执行之前的操作 */ @override protected void onpreexecute() { // todo auto-generated method stub super.onpreexecute(); } /** * 主要是完成耗时的操作 */ @override protected bitmap doinbackground(string... arg0) { inputstream inputstream=netservice.getinputstreambyurl(arg0[0]); if(inputstream!=null){ return bitmapfactory.decodestream(new bufferedinputstream(inputstream)); } return null; } /** * 主要是更新ui的操作 */ @override protected void onpostexecute(bitmap result) { // todo auto-generated method stub super.onpostexecute(result); if(this.urlposthandler!=null&&result!=null){ this.urlposthandler.posthandler(result); } } @override public void run() { execute(this.address); } }
urlposthandler:回调接口
public interface urlposthandler { void posthandler(bitmap bitmap); }
前台请求图片并显示到imageview
public class mainactivity extends appcompatactivity { button buttondownload; imageview imageviewimg; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); buttondownload = (button) findviewbyid(r.id.buttondownload); imageviewimg = (imageview) findviewbyid(r.id.imageviewimg); buttondownload.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string address = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490783056273&di=6160d101d31dcf5f44b443ad9c5b2648&imgtype=0&src=http%3a%2f%2fimg.sc115.com%2fuploads%2fallimg%2f110626%2f2011062622383898.jpg"; netservicetask netservertask= new netservicetask(address,new urlposthandler() { @override public void posthandler(bitmap bitmap) { imageviewimg.setimagebitmap(bitmap); } }); thread thread=new thread(netservertask); thread.start(); } }); } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持移动技术网!
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论