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使用AsyncTask下载图片并显示进度条功能,包括了Android使用AsyncTask下载图片并显示进度条功能的使用技巧和注意事项,需要的朋友参考一下 在Android中实现异步任务机制有两种方式,Handler和AsyncTask。这篇文章给大家介绍Android使用AsyncTask下载图片并显示进度条功能。 AsyncTask下载图片并显示下载进度,异步类As
本文向大家介绍Android使用webView长按保存下载网络图片,包括了Android使用webView长按保存下载网络图片的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android使用webView长按保存下载网络图片的具体代码,供大家参考,具体内容如下 最近发现在webView的setOnLongClickListener中可以获取到WebView.HitTestResul
本文向大家介绍python抓取网站的图片并下载到本地的方法,包括了python抓取网站的图片并下载到本地的方法的使用技巧和注意事项,需要的朋友参考一下 实例如下所示: 以上这篇python抓取网站的图片并下载到本地的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍python3 下载网络图片代码实例,包括了python3 下载网络图片代码实例的使用技巧和注意事项,需要的朋友参考一下 说明:这里仅展示在已经获取图片链接后的下载方式,对于爬虫获取链接部分参考前面的文章 1、利用文件读写的方式下载图片 2、urlretrieve()方法 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android编程显示网络上的图片实例详解,包括了Android编程显示网络上的图片实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程显示网络上的图片的方法。分享给大家供大家参考,具体如下: 在Android中显示网络上的图片,需要先根据url找到图片地址,然后把该图片转化成Java的InputStream,然后把该InputStream流转化成Bit
本文向大家介绍python使用Tkinter显示网络图片的方法,包括了python使用Tkinter显示网络图片的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python使用Tkinter显示网络图片的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。