全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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 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  # 下载网络图片  # 下载网络图片到本地  # 图片保存本地  # 图片本地下载  # Android 网络图片查看显示的实现方法  # Android读取本地或网络图片并转换为Bitmap  # Android 异步获取网络图片并处理导致内存溢出问题解决方法  # Android显示网络图片实例  # 简单实现Android读取网络图片到本地  # Android使用线程获取网络图片的方法  # 在Android的应用中实现网络图片异步加载的方法  # Android实现网络图片浏览功能  # Android 读取sdcard上的图片实例(必看)  # Android sdcard实现图片存储 、联网下载  # Android开发实现加载网络图片并下载至本地SdCard的方法  # 回调  # 下载图片  # 转换为  # 主要是  # 放在  # 不可以  # 将该  # 抛出  # 最优  # getInputStream  # NetServiceTask  # catch  # IOException  # printStackTrace  # return  # HttpURLConnection  # urlConnection  # url  # null  # setRequestMethod 


相关文章: 专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  Android自定义listview布局实现上拉加载下拉刷新功能  如何快速生成凡客建站的专业级图册?  如何批量查询域名的建站时间记录?  ,柠檬视频怎样兑换vip?  ,巨量百应是干嘛的?  如何快速打造个性化非模板自助建站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  建站之星安全性能如何?防护体系能否抵御黑客入侵?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何在Windows 2008云服务器安全搭建网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站之星好吗?新手能否轻松上手建站?  如何零成本快速生成个人自助网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  北京的网站制作公司有哪些,哪个视频网站最好?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  b2c电商网站制作流程,b2c水平综合的电商平台?  ,网站推广常用方法?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  制作网站外包平台,自动化接单网站有哪些?  如何选择适合PHP云建站的开源框架?  已有域名和空间,如何快速搭建网站?  如何在IIS7中新建站点?详细步骤解析  网站制作网站,深圳做网站哪家比较好?  婚礼视频制作网站,学习*后期制作的网站有哪些?  建站主机系统SEO优化与智能配置核心关键词操作指南  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何基于云服务器快速搭建个人网站?  招商网站制作流程,网站招商广告语?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何注册花生壳免费域名并搭建个人网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  制作营销网站公司,淘特是干什么用的?  如何在新浪SAE免费搭建个人博客?  黑客如何利用漏洞与弱口令入侵网站服务器?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  大型企业网站制作流程,做网站需要注册公司吗?  如何用y主机助手快速搭建网站?  Swift中swift中的switch 语句  如何高效配置IIS服务器搭建网站?  如何在服务器上三步完成建站并提升流量?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。