一个异步任务接收两个url下载两个图片
有两个url,一个是下载用户头像的url,一个是下载用户上传图片的url,想要用一个异步任务同时下载这两个图片。
程序的下载任务是这么执行的,先接受url参数,然后调用
imgUrls = infoPack[3];
headerImg_url = infoPack[8];
downloadImg();//根据图片url下载图片
这里的downloadImg()方法体没有接收任何参数,只是建立了一个服务器连接请求,然后启动了一个下载的异步任务,DownloadImgTask ,然后我在DownloadImgTask里面,
private class DownloadImgTask extends AsyncTask<String, String, Boolean>{
private String imgDownloadUrls = imgUrls ;
private String head_imgDownloadUrls = headerImg_url ;
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
//在此下载图片
DownloadManager dm = ARUtils.GetDownloadManager();
try {
if(dm.downloadImg(imgDownloadUrls, getAppPath() +"/user_pic/"+ users_name +".jpg")) //下载完后,就返回true
return true;
if(dm.downloadImg(head_imgDownloadUrls, getAppPath() +"/user_portrait/"+users_name+".jpg"))
return true;
} catch (Exception e){
Log.e(ARUtils.TAG, e.getMessage());
}
return false;
}
protected void onPostExecute(Boolean result) {
// 以下代码略。。。。。。
}
可以看到在异步任务里,执行完下载user_pic,就会返回true,因此运行结果就是只能显示出用户上传的图片,到那时头像却怎么也加载不出来。后来调试的时候,我只让异步任务下载头像,结果头像可以加载出来,然后认为下载头像没问题。然后这时候我把两部份都下载,也没加什么代码,结果运行的是user_portrait,user_pic都可以加载出来,我以为之前没出来是网络慢的原因,貌似表面成功了,其实我犯了一个隐含的错误。菜鸟就是菜鸟,不过菜鸟还是能发现自身问题的,我只下载头像,头像文件已经被我保存了,所以下次在运行的时候,头像不是下载的,而是从文件中读取的 = = |||。
亏了师兄一句提醒,2个url,一般最好异步任务进行参数设置,让异步任务传进来的参数就是你要下载的url,这样你要传进来的就是个数组了。之前没有参数的传递,只是在异步任务里硬塞2个url,进行下载。
因此把2个url放进一个数组,传给下载方法,并且让异步任务接收启动任务的参数就行了。
//第一部分,参数传递
imgUrls = infoPack[3];//
headerImg_url = infoPack[8];
String downloadImgurl[] ={imgUrls,headerImg_url};
downloadImg(downloadImgurl);//根据图片url下载图片
//第二部分,将参数传递,启动异步任务
public void downloadImg(String[] url){ //这里传入的就是个数组了
String downloadImgurl[] = url;
ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()){
DownloadImgTask imgDownTask = new DownloadImgTask();
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
imgDownTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, downloadImgurl );
} else {
imgDownTask.execute(downloadImgurl);
}
}
}
//第三部分
private class DownloadImgTask extends AsyncTask<String[], String, Boolean>{//这里启动异步任务的第一个参数就是数组了。就是doInBackGround()接收的参数
private String imgDownloadUrls = imgUrls ; private String head_imgDownloadUrls = headerImg_url ; protected Boolean doInBackground(String[]... params) { // TODO Auto-generated method stub //在此下载图片 DownloadManager dm = ARUtils.GetDownloadManager(); try { //这里我写进了一个if里,只用返回一次值,这样加载图片快很多if(dm.downloadImg(imgDownloadUrls, getAppPath() +"/user_pic/"+ users_name +".jpg") && dm.downloadImg(head_imgDownloadUrls, getAppPath() +"/user_portrait/"+users_name+".jpg")) returntrue; } catch (Exception e){ Log.e(ARUtils.TAG, e.getMessage()); } returnfalse; } protectedvoid onPostExecute(Boolean result) { //略去。。。。 }
总结:针对本例来讲,一部异步任务下载两个图片,必须进行参数设置,因为这样异步任务传入的参数就不是一个string了,而是一个string[ ]了。异步任务的参数很重要滴。。
————————————————————————————————————分割线————————————————————————————————————————
异步任务参数:
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI 线程中创建
2) execute方法必须在UI 线程中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。
4) 该task只能被执行一次,否则多次调用时将会出现异常
doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为 doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参 数。
//AsyncTask<>的参数类型由用户设定,这里设为三个String(第一个、第三个很重要,doInBackground()的返回值类型就是onPostExecute()的输入参数类型,二者要统一)
//第一个String代表输入到任务的参数类型,也即是doInBackground()的参数类型
//第二个String代表处理过程中的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息
//传递给onProgressUpdate()一般用来更新界面
//第三个String代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型
一个异步任务接收两个url下载两个图片的更多相关文章
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 ...
- 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)
一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(三,接收彩信<2,下载彩信>)
彩信的接收简介: 主要是由应用程序负责从彩信服务中心(MMSC Multimedia Messaging Service Center)下载彩信信息.大致的流程是Frameworks会先发出一条短信, ...
- AJAX其实就是一个异步网络请求
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).其实就是一个异步网络请求. 一.创建对象 var xmlhttp; if (w ...
- MFC通过URL下载并保存文件代码 转载
http://blog.csdn.net/charlessimonyi/article/details/8666108?utm_source=tuicool&utm_medium=referr ...
- ASIHTTP 框架,同步、 异步请求、 上传 、 下载
ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度 ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
- 深入理解Tornado——一个异步web服务器
本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html原 ...
随机推荐
- Python CGI编程和CGIHTTPServer
Python2.7 的CGIHTTPServer 可以作为一个简单的HTTP服务器,能够调用cgi脚本 1 在任意目录下创建一个特殊的目录 cgi-bin ,用于存放自己写的脚本(.py或.cgi) ...
- vim(ubuntu) 设置行号和缩进
在终端 输入以下命令来编辑vimrc配置文件: sudo vim /etc/vim/vimrc 或者 sudo gedit /etc/vim/vimrc 1.显示行号 在文件末端添加一新行,输入 se ...
- 转: JMeter技巧集锦
from:http://java.chinaitlab.com/tools/355421.html JMeter 是一个流行的用于负载测试的开源工具, 具有许多有用的功能元件,如线程组(thread ...
- 开源内容管理系统Joomla正式发布3.5版本 基于PHP 7
这也是首个完全支持 PHP 7 语言开发的 Joomla 版本 作为深受广大站长喜爱的 Joomla 开源内容管理系统(Content Management System, CMS)正式推出 3.5 ...
- CNS的数据库搜索网站可用solr实现
使用solr的DIH (data import handler) 可以操作后台数据库,前端solr自带的search ui (localhost:8983/solr/collection1/brows ...
- What is “Mock You” :Raise,callback,verify [转载]
http://www.cnblogs.com/wJiang/archive/2010/02/21/1670637.html Raise 如果你说会用Setup,那么Raise就更简单了.这里注意下它是 ...
- 【Android Demo】通过WebService获取今日天气情况--转
因为本身是在搞.NET方面的东东,现在在学习Android,所以想实现Android通过WebService接口来获取数据,网上很多例子还有有问题的.参考:Android 通过WebService进行 ...
- php各项下载地址
Apache2.4下载地址 http://www.apachehaus.com/cgi-bin/download.plx PHP5.6下载地址 http://php.net/downloads.p ...
- mysql中变量character_set_connection的具体作用
如题.通常的使用中,character_set_client,character_set_connection这两个变量的值是一样的,也就是说查询不需要进行编码转换.这样看来变量character_s ...
- 过实现鹰眼图这个功能来进一步学习MapControl控件
我们通过实现鹰眼图这个功能来进一步学习MapControl控件.在实现鹰眼图之前,我们需 要接口有更深入的了解. 变主动为被动-出接口(OutBound interface) COM编程类似客户端和服 ...