"奇葩家园“之 asyncTask 与 url 下载篇
asyncTask 是android提供的一个轻量级的异步处理的类,有3个泛型参数,params,progress,result
params: 启动任务执行的时候传入的参数比如请求的 url 地址
progress:后台任务执行的百分比
result:后台任务执行完毕后返回的结果 比如string
使用asynctask必须要重写2个方法,一个是 doInBackground(Params...) 后台执行的方法,比较耗时的方法,这里不能直接操作ui,可以通过publicProgress(Progress...)来更新任务的进度
第2个方法是 onPostExecute(Result)相当于handler的处理ui的方式,此方式是任务执行完毕后获取返回的结果,进行下一步的处理。
还有 比如onPreExecute () 任务执行之前的方法,onCancelled() 用户调用取消时,要做的操作,onProgressUpdate(Progress...)可以使用进度条增加用户的体验度,此方法在主线程上执行,可以操作UI
注意事项:
task的实例必须在UI Thread中创建
execute方法必须在ui thread中调用
不要手动去调用 onPreExecute()....等方法
task只能被执行一次,否则多次调用时出现异常
demo:
private void asyncTaskGetJson(String params) {
new AsyncTask<String, Float, String>() {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
URL url;
StringBuilder sb = new StringBuilder();
try {
url = new URL(params[0]);
URLConnection connection = url.openConnection();
float size = connection.getContentLength();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
publishProgress((float)sb.toString().length() / size );
}
br.close();
isr.close();
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "开始访问sina网", Toast.LENGTH_LONG).show();
Log.d("abc", "开始访问sina网");
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "错误请求"+result, Toast.LENGTH_LONG).show();
Log.d("abc", "访问完毕,内容"+result);
}
@Override
protected void onProgressUpdate(Float... values) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "请求"+values[0], Toast.LENGTH_LONG).show();
}
}.execute(params);
}
调用:
asyncTaskGetJson("http://www.sina.com");
"奇葩家园“之 asyncTask 与 url 下载篇的更多相关文章
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- 一个异步任务接收两个url下载两个图片
有两个url,一个是下载用户头像的url,一个是下载用户上传图片的url,想要用一个异步任务同时下载这两个图片. 程序的下载任务是这么执行的,先接受url参数,然后调用 imgUrls = infoP ...
- C++根据图片url下载图片
需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...
- 从指定的URL下载文件
通过使用URLDownLoadToFile函数,我们能从指定的URL下载文件,保存到本地,并且下载的文件类型可以是可执行文件 实例如下,http://www.xuexic.com 的根目录下存在一个l ...
- 使用url下载网络图片以及流介绍
使用url下载网络图片的时候,首先需要建立一个URL对象,然后使用一个输入流获取该URL中的内容.之后使用读取该输入流的内容,使用一个输出流写到本地文件中.最后关闭输入和输出流.下面是一个简单的下载代 ...
- QT实现,通过URL下载文件的接口实现
今天来把坑填上. 具体就是提供一个URL,并通过这个URL下载文件. MyDownloader.h: #ifndef MYDOWNLOADER_H #define MYDOWNLOADER_H cla ...
- 从url下载图片--java与python实现方式比较
从url下载图片--java与python实现方式比较 博客分类: 技术笔记小点滴 javapython图片下载 一.java的实现方式 首先读取图片 //方式一:直接根据url读取图片 priva ...
- java 根据Url下载对应的文件到指定位置,读txt文件获取url
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- MFC通过URL下载并保存文件代码 转载
http://blog.csdn.net/charlessimonyi/article/details/8666108?utm_source=tuicool&utm_medium=referr ...
随机推荐
- NTP服务器地址及IP
yum install ntp */20 * * * * /usr/sbin/ntpdate 61.172.254.29 210.72.145.44 (国家授时中心服务器IP地址)133.100.11 ...
- App交互demo
Android <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- 使用fiddler2抓取手机发出的请求信息
fiddler2 简介:抓包软件,可以替换服务器js,从而实现本地调试 初始化设置: 1.工具——fiddler选项——常规——允许远程计算机连接(打钩) 2.按下图设置 3.设置连接,如 ...
- dell 交换机 双链路冗余
公司海外机房引入2G带宽,是由2个电口绑定实现的.因业务需要扩容到3G,在绑定端口扩展性不太好,因此直接上10G光纤模块. 机房技术人员建议,2g老线路不撤做备份,3g新线路在线使用.使用STP协议实 ...
- jquery css快捷方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C# Webservice 解决在运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度问
摘自: http://blog.csdn.net/gulijiang2008/article/details/4482993 请在服务器端配置 方法一: 在通过WebService处理大数据量数据时出 ...
- CentOS系统安装中文man手册
http://jingyan.baidu.com/article/f25ef25466bffc482c1b82b6.html
- Widows2003开机取消按CTRL+ALT+DEL
一, Widows2003开机取消按CTRL+ALT+DEL 1. 单击windows开始键→管理工具→本地安全策略(如下图) 2. 本地安全设置→本地策略→安全选项 3. 安全选项→右侧→找到这个文 ...
- 盒子的padding不影响总的大小css代码
-moz-box-sizing: border-box; /*Firefox3.5+*/-webkit-box-sizing: border-box; /*Safari3.2+*/-o-box-siz ...
- HTML中Meta属性http-equiv="X-UA-Compatible"详解
HTML下head中的http-equiv="X-UA-Compatible"详解: X-UA-Compatible是针对IE8新加的一个设置,对于IE8之外的浏览器是不识别的,这 ...