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

发布时间 - 2026-01-11 00:27:21    点击率:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何发送系统通知?(Notification渠道示例)  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何挑选高效建站主机与优质域名?  如何在Windows 2008云服务器安全搭建网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  如何快速生成高效建站系统源代码?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  公司门户网站制作流程,华为官网怎么做?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  jQuery validate插件功能与用法详解  香港服务器网站卡顿?如何解决网络延迟与负载问题?  清除minerd进程的简单方法  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  移动端脚本框架Hammer.js  微信小程序 HTTPS报错整理常见问题及解决方案  JavaScript中的标签模板是什么_它如何扩展字符串功能  Android okhttputils现在进度显示实例代码  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在云虚拟主机上快速搭建个人网站?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  如何在阿里云香港服务器快速搭建网站?  Android GridView 滑动条设置一直显示状态(推荐)  怎样使用JSON进行数据交换_它有什么限制  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  ,网页ppt怎么弄成自己的ppt?  如何快速搭建高效WAP手机网站吸引移动用户?  原生JS实现图片轮播切换效果  网站制作免费,什么网站能看正片电影?  Laravel如何升级到最新版本?(升级指南和步骤)  JS去除重复并统计数量的实现方法  图册素材网站设计制作软件,图册的导出方式有几种?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel如何实现用户注册和登录?(Auth脚手架指南)  音乐网站服务器如何优化API响应速度?  如何在腾讯云免费申请建站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  ,南京靠谱的征婚网站?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)