Android 下载网络图片并显示到本地

Android 下载网络图片并显示到本地,第1张

概述Android下载网络图片的流程是:发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件。

AndroID下载网络图片的流程是:

发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageVIEw控件。

注意点

最新的AndroID系统不可以在主线程上请求网络,需要使用线程来请求 下载图片属于耗时任务,最优做法是放在一个AsyncTask中 *** 作

设计思路

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 AsyncTaskpublic NetServiceTask(String address,URLPostHandler urlPostHandler) { this.address=address; this.urlPostHandler=urlPostHandler;}/** * 表示任务执行之前的 *** 作 */@OverrIDeprotected voID onPreExecute() { // Todo auto-generated method stub super.onPreExecute();}/** * 主要是完成耗时的 *** 作 */@OverrIDeprotected Bitmap doInBackground(String... arg0) { inputStream inputStream=NetService.getinputStreamByUrl(arg0[0]); if(inputStream!=null){  return BitmapFactory.decodeStream(new BufferedinputStream(inputStream)); } return null;}/** * 主要是更新UI的 *** 作 */@OverrIDeprotected voID onPostExecute(Bitmap result) { // Todo auto-generated method stub super.onPostExecute(result); if(this.urlPostHandler!=null&&result!=null){  this.urlPostHandler.PostHandler(result); }}@OverrIDepublic voID run() { execute(this.address);}}

URLPostHandler:回调接口

public interface URLPostHandler {voID PostHandler(Bitmap bitmap);}

前台请求图片并显示到ImageVIEw

public class MainActivity extends AppCompatActivity {@R_404_5554@ @R_404_5554@Download;ImageVIEw imageVIEwimg;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); @R_404_5554@Download = (@R_404_5554@) findVIEwByID(R.ID.@R_404_5554@Download); imageVIEwimg = (ImageVIEw) findVIEwByID(R.ID.imageVIEwimg); @[email protected](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 下载网络图片并显示到本地全部内容,希望文章能够帮你解决Android 下载网络图片并显示到本地所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存