时间:2021-05-21
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 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 {Button buttonDownload;ImageView imageViewImg;@Overrideprotected 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(); } });}}以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Android开发实现加载网络图片并下载至本地SdCard的方法。分享给大家供大家参考,具体如下:packagecom.example.myima
使用simplecommand下载网络图片,并显示到ImageView控件上。1在appmodule的build.gradle将simplecommand框架进
Android手机上,我们常用ImageView显示图片,我们本章获取网络图片并显示在ImageView中。一、设计界面 1、布局文件 打开res/layo
Android通过网络图片路径查看图片实例详解1.在项目清单中添加网络访问权限2.获取网络图片数据/***获取网络图片的数据*@parampath网络图片路径*
本文实例为大家分享了android查看网络图片的具体代码,供大家参考,具体内容如下需求描述:输入一个图片地址,下载到本地展示。效果展示代码清单MainActiv