用AsyncTask来获取网络图片

先看下运行结束

这里有两个Button

1120651-20170926101011260-675426867.png

点击第一个Button运行的结果!第一张有一个旋转的灰色圈圈!

1120651-20170926101132792-2094324715.png
1120651-20170926101143464-1928823818.png

点击第二个Button运行的结果如下:带进度条的

1120651-20170926101252464-440270940.png
1120651-20170926101305964-430507029.png

ok,看下实现方法

1120651-20170926101405573-984469263.png

先在配置清单中加一个访问网络的权限!

    <uses-permission android:name="android.permission.INTERNET" />

下面是第一个Button实现效果所使用的方法

第一步:在image布局中添加控件

   <ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/imaged"/><ProgressBarandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="gone"android:layout_centerInParent="true"android:id="@+id/progressBar"/>

第二步:直接到ImageTeakJava类中来

public class ImageTeak extends AppCompatActivity {private ProgressBar mProgressbar;private ImageView mImage;private MyAsyncTask task;//网络图片地址private static String url="http://b365.photo.store.qq.com/psb?/V1112Bib4N2Zv2/yIw4AGwbwoCsuA5Zid.eAEE9YpH0znIsrS4os49LY7M!/c/dG0BAAAAAAAA&bo=OARoBQAAAAAREHY!&rf=mood_app";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.image);mProgressbar= (ProgressBar) findViewById(R.id.progressBar);mImage= (ImageView) findViewById(R.id.imaged);//创建一个类task =new MyAsyncTask();//启动task.execute(url);}/** AsyncTask<String,Void,Bitmap>第一个参数;为输入的url参数是String类型的第二个参数:我们没有进度条所以为Void类型的第三个参数;返回的是Bitmap*/class MyAsyncTask extends AsyncTask<String,Void,Bitmap>{@Override//第一个会调用的方法protected void onPreExecute() {// 开始之前要做的准备操作在这里面执行super.onPreExecute();mProgressbar.setVisibility(View.VISIBLE);//显示进度}@Override//第三个会调用的方法。用来展示处理的结果!// (当doInBackground方法完成异步处理之后会调用的方法)protected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);mProgressbar.setVisibility(View.GONE);/*** 将doInBackground()方法中* 返回的bitmap解析的图片设置给ImageView* */mImage.setImageBitmap(bitmap);}@Override//第二个会调用的方法。真正的耗时操作!下载网络图片protected Bitmap doInBackground(String... strings) {//获取传递进来的参数,取出对应的URLString url=strings[0];//定义网络连接对象URLConnection connection;//获取需要的BitmapBitmap bitmap=null;//获取数据的输入流InputStream is;try {//获取网络连接对象connection=new URL(url).openConnection();//获取输入流is=connection.getInputStream();//包装下BufferedInputStream bis=new BufferedInputStream(is);//设置睡眠三秒Thread.sleep(3000);//通过decodeStream()方法解析输入流将输入流解析成Bitmap图片bitmap= BitmapFactory.decodeStream(bis);//关闭流is.close();bis.close();//捕获异常} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}//返回的是解析后的网络图像return bitmap;}}
}

第三步:在activity.xml布局中添加两个 Button

  <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="loadImage"android:text="加载图片"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/loadProgress"android:onClick="loadProgress"android:text="带进度条的获取图片"/>

第四步:在Mactivity.java中进行编辑

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* MsyncTask task=new MsyncTask();task.execute();*/}public void loadImage(View view){Intent intent=new Intent(MainActivity.this,ImageTeak.class);startActivity(intent);}public void loadProgress(View view){Intent intent=new Intent(MainActivity.this,ProgressTesk.class);startActivity(intent);}
}

OK!点击第一个Button效果的代码写完啦!、

再看下第第二ButtOn实现效果的代码

第一步:在progress.xml布局中添加控件

<ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/imageView"/><ProgressBarandroid:visibility="gone"android:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:id="@+id/bar"android:layout_centerInParent="true"/>

第二步:对ProgressTesk.java类进行编辑

public class ProgressTesk extends AppCompatActivity {private ProgressBar bar;private MyAsyncTask task;private ImageView imageView;private static String url="http://b389.photo.store.qq.com/psb?/V1112Bib4N2Zv2/0Ahi.ZaLH*i0tsSy3dlWnUNIXOXdYXRbVdwdoUpfxwk!/m/dIUBAAAAAAAAnull&bo=OASgBQAAAAAFB70!&rf=photolist&t=5";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.progress);//控件实例化bar= (ProgressBar) findViewById(R.id.bar);imageView= (ImageView) findViewById(R.id.imageView);//创建对象task=new MyAsyncTask();//启动异步处理task.execute(url);}class MyAsyncTask extends AsyncTask<String,Integer,Bitmap>{@Overrideprotected void onPreExecute() {super.onPreExecute();bar.setVisibility(View.VISIBLE);}@Overrideprotected Bitmap doInBackground(String... strings) {for (int i=0;i<100;i++){publishProgress(i);//传递进度值给onProgressUpdate方法try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}}String url=strings[0];URLConnection connection;Bitmap bitmap=null;InputStream is;try {connection=new URL(url).openConnection();is=connection.getInputStream();BufferedInputStream bis=new BufferedInputStream(is);Thread.sleep(3000);bitmap= BitmapFactory.decodeStream(bis);is.close();bis.close();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}return bitmap;}/*** 这个方法是承接doInBackground()方法中的i的* 通过Integer方法所传递出来的i作用到了values数组上* */@Override  //获取进度更新值protected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);/*** 从values数组中传递过来的i作为mProgressBar的进度值* 由于这里只传递进来一个数,所以这里只需要获取0就OK了~* */bar.setProgress(values[0]);}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);bar.setVisibility(View.GONE);imageView.setImageBitmap(bitmap);}}
}

最后运行下!看效果如何...

转载于:https://www.cnblogs.com/zyl222/p/7595424.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bilibili有电脑版吗_哪个手机便签软件有电脑版?有跨平台的桌面便签软件吗 - 学显...

如果仔细观察的话&#xff0c;你会发现&#xff1a;现在很多手机桌面上都有一款名叫“便签”的app小软件。其实&#xff0c;这是手机系统自带的一款备忘小工具&#xff0c;是为了方便用户记事而设计的。也就是说&#xff0c;平时如果有什么事儿需要记下来的话&#xff0c;就可以…

win10关机后自动重启_安卓手机重启和关机后再开机,区别原来这么大!别不当回事...

现在大家用智能手机&#xff0c;只会在以下几种情况关机&#xff0c;一种是用到没电&#xff0c;自动关机了。另一种是手机有点卡顿&#xff0c;通过关机再开机的方式&#xff0c;释放RAM内存&#xff0c;提高手机运行速度。而现在的很多手机&#xff0c;比如小米手机&#xff…

前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解

1、2017前端面试题及答案总结 |掘金技术征文 "金三银四&#xff0c;金九银十"&#xff0c;用来形容求职最好的几个月。但是随着行业的饱和&#xff0c;初中级前端er就业形势不容乐观。 行业状态不可控&#xff0c;我们能做的当然只是让自己变得更加具有竞争力。 今年…

python二级考试真题_全国BIM技能等级考试真题全套(一/二级,全专业,28套)

BIM技能等级考试即将到来&#xff0c;你准备好了吗&#xff1f;今日为大家整理了一套网友上传的BIM等级考试全套真题&#xff0c;供大家学习参考~BIM一级真题解析课程限免&#xff1a;(点我)全国BIM技能等级考试真题解析(一级)仅限6月5日一天免费第一期全国BIM技能等级考试一级…

Awk使用方法简介

AWK AWK简介&#xff1a;awk是一个强大的文本分析工具&#xff0c;相对于grep的查找&#xff0c;sed的编辑&#xff0c;awk在其对数据分析并生成报告时&#xff0c;显得尤为强大。简单来说awk就是把文件逐行的读入&#xff0c; 以空格为默认分隔符将每行切片…

矩形波如何傅立叶展开_金科文化会不会连续拉板?两位同学展开激辩

【编者按&#xff1a;金科文化是我们昨晚理论上留下的两道作业题之一&#xff0c;要求同学们根据课程内容&#xff0c;判断一下它是否符合连板青云的条件&#xff1f;后市如何预判&#xff1f;操作计划怎么制定&#xff1f;今天&#xff0c;很多同学就此展开了分析和讨论。今晚…

java web 不用框架_MyShop-不用框架的基础javaweb项目

javaweb基础开发Servletjspmysqlhtmlcssjs(找一个前端模板&#xff0c;一大堆html,自己写的没有模板的美观)数据库设计来一个最基础的用户表drop table ifexists myshop_user;create table myshop_user(USER_ID varchar(32) not null,USER_NAME varchar(20) not null,USER_PASS…

程序包管理器控制台 Add-Migration 用法

需要注意的是&#xff1a; 1.任何对数据库的操作都在代码和程序包管理控制台完成&#xff0c;千万不要自己去修改数据库&#xff0c;no&#xff01; 2.ef中创建数据库的表必须要有主键~&#xff01;否则 就不让你成功~ 现在来说如何映射 第一步创建在代码model中创建类 第二步 …

ipad如何连接电脑_电脑无法连接外网远程调试,一文教你如何用手机让台式机连接外网...

在弱电施工中&#xff0c;设备调试是一个很重要的环节&#xff0c;施工这么久就是为了实现弱电各系统的功能&#xff0c;调试是每一个弱电人系必需会的技能&#xff0c;也是检验你结合能力一种体现。在调试中会遇到各种你想不到的问题&#xff0c;当遇到问题时&#xff0c;你应…

java 多线程两种方式_JAVA多线程实现的两种方式

java多线程实现方式主要有两种&#xff1a;继承Thread类、实现Runnable接口1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式&#xff0c;但Thread本质上也是实现了Runnable接口的一个实例&#xff0c;它代表一个线程的实例&#xff0c;并且&#x…

安卓手机浏览器排行_安卓手机性能排行榜:国产手机集体“出位”,华为却在角落哭泣?...

华为手机的芯片一直都坚称是国产的骄傲&#xff0c;但是现在的华为芯片出现了一系列的问题&#xff0c;甚至有人预言在今年九月份之后&#xff0c;华为就不再会获得台积电的芯片供应了。这样&#xff0c;对华为来说无疑是不好的势头&#xff0c;而且芯片刚被市场认可&#xff0…

_Linux结束进程到底有多少种方法?

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习。1. 前言我们经常在Linux里使用kill命令来结束某后台进程。但kill命令实际上是向进程发送信号&#xff0c;并且有多种信号。终止运行一…

mulitpartfile怎么接收不到值_光端机电源正常,但是运行不了怎么办?

光端机&#xff0c;是光信号传输的终端设备&#xff0c;在安防领域有很好的应用。伴随着监控的发展&#xff0c;视频光端机就是把1路到多路的模拟视频信号通过各种编码转换成光信号通过光纤介质来传输的设备分&#xff0c;分为模拟光端机和数字光端机。其中&#xff0c;光传输系…

aes 加密_结合RSA与AES实现前后端加密通信

结合RSA与AES实现前后端加密通信一、思路使用RSA秘钥生成工具生成一对公钥(A)和私钥(B)&#xff0c;前端保留A&#xff0c;后端保留B。前端发送数据时&#xff0c;先生成一串随机16位字符串作为AES的秘钥(C)&#xff0c;然后使用A使用RSA算法对C进行加密&#xff0c;得到加密后…

cxf java调用.net_CXF在项目中的真实运用--WS访问客户端编写[java、.net]

一、首先,CXF的WS实现类由于实现了和Spring的无缝集成&#xff0c;因此可以采用Spring的单元测试来测试基本功能。代码如下&#xff1a;[java]package com.defshare.sy.test.biz;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import…

中值滤波去除图像噪声的matlab程序

中值滤波&#xff1a;基于排序理论的一种能有效抑制噪声的非线性信号处理技术。 方法&#xff1a;取含有基数&#xff08;偶数会有半像素的差&#xff09;个模板数据的滑动模板&#xff0c;对模板中的数据从小到大排序&#xff0c;取排在中间位置上的数据作为最终的处理结果。 …

android 音乐app 进度条_让这些可爱的APP成为你的生活好帮手

对于可爱美观的东西&#xff0c;绝大多数人都会喜欢&#xff0c;尤其是女孩子。今天给大家推荐一波可爱又实用的APP&#xff0c;让它们成为你的生活好助手。以下应用在手机应用商店搜索即可下载。01 喵喵记账 支持 iOS 和 Android&#xff0c;免费谈到记账&#xff0c;很多…

java中scanner与hashmap_Java中HashMap的使用练习

问题&#xff1a;给定任意一个字符串“today is a special day”&#xff0c;长度为任意&#xff0c;要求找出其出现次数最多的字符及计算次数。(可以用HashMap&#xff0c;HashSet&#xff0c;Collections实现)解决&#xff1a;利用HashMap和HashSet解决。代码&#xff1a;imp…

计蒜客NOIP2017提高组模拟赛(四)day1

T1:小X的质数 小 X 是一位热爱数学的男孩子&#xff0c;在茫茫的数字中&#xff0c;他对质数更有一种独特的情感。小 X 认为&#xff0c;质数是一切自然数起源的地方。 在小 X 的认知里&#xff0c;质数是除了本身和 1 以外&#xff0c;没有其他因数的数字。 但由于小 X 对质数…

c# combobox集合数据不显示_Excel也能玩转百万数据

最近一方君工作中要查询编辑很多的数据&#xff08;超过30万行&#xff0c;25个字段&#xff09;&#xff0c;这么多数据放在Excel表中当然是没办法操作的&#xff0c;筛选的时候很容易崩溃&#xff0c;原来用得很顺滑的一些公式&#xff0c;一计算就未响应&#xff0c;多点几下…