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 下载篇的更多相关文章

  1. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  2. 一个异步任务接收两个url下载两个图片

    有两个url,一个是下载用户头像的url,一个是下载用户上传图片的url,想要用一个异步任务同时下载这两个图片. 程序的下载任务是这么执行的,先接受url参数,然后调用 imgUrls = infoP ...

  3. C++根据图片url下载图片

    需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...

  4. 从指定的URL下载文件

    通过使用URLDownLoadToFile函数,我们能从指定的URL下载文件,保存到本地,并且下载的文件类型可以是可执行文件 实例如下,http://www.xuexic.com 的根目录下存在一个l ...

  5. 使用url下载网络图片以及流介绍

    使用url下载网络图片的时候,首先需要建立一个URL对象,然后使用一个输入流获取该URL中的内容.之后使用读取该输入流的内容,使用一个输出流写到本地文件中.最后关闭输入和输出流.下面是一个简单的下载代 ...

  6. QT实现,通过URL下载文件的接口实现

    今天来把坑填上. 具体就是提供一个URL,并通过这个URL下载文件. MyDownloader.h: #ifndef MYDOWNLOADER_H #define MYDOWNLOADER_H cla ...

  7. 从url下载图片--java与python实现方式比较

    从url下载图片--java与python实现方式比较 博客分类: 技术笔记小点滴 javapython图片下载  一.java的实现方式 首先读取图片 //方式一:直接根据url读取图片 priva ...

  8. java 根据Url下载对应的文件到指定位置,读txt文件获取url

    package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  9. MFC通过URL下载并保存文件代码 转载

    http://blog.csdn.net/charlessimonyi/article/details/8666108?utm_source=tuicool&utm_medium=referr ...

随机推荐

  1. NTP服务器地址及IP

    yum install ntp */20 * * * * /usr/sbin/ntpdate 61.172.254.29 210.72.145.44 (国家授时中心服务器IP地址)133.100.11 ...

  2. App交互demo

    Android <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  3. 使用fiddler2抓取手机发出的请求信息

    fiddler2 简介:抓包软件,可以替换服务器js,从而实现本地调试 初始化设置: 1.工具——fiddler选项——常规——允许远程计算机连接(打钩)     2.按下图设置   3.设置连接,如 ...

  4. dell 交换机 双链路冗余

    公司海外机房引入2G带宽,是由2个电口绑定实现的.因业务需要扩容到3G,在绑定端口扩展性不太好,因此直接上10G光纤模块. 机房技术人员建议,2g老线路不撤做备份,3g新线路在线使用.使用STP协议实 ...

  5. jquery css快捷方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. C# Webservice 解决在运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度问

    摘自: http://blog.csdn.net/gulijiang2008/article/details/4482993 请在服务器端配置 方法一: 在通过WebService处理大数据量数据时出 ...

  7. CentOS系统安装中文man手册

    http://jingyan.baidu.com/article/f25ef25466bffc482c1b82b6.html

  8. Widows2003开机取消按CTRL+ALT+DEL

    一, Widows2003开机取消按CTRL+ALT+DEL 1. 单击windows开始键→管理工具→本地安全策略(如下图) 2. 本地安全设置→本地策略→安全选项 3. 安全选项→右侧→找到这个文 ...

  9. 盒子的padding不影响总的大小css代码

    -moz-box-sizing: border-box; /*Firefox3.5+*/-webkit-box-sizing: border-box; /*Safari3.2+*/-o-box-siz ...

  10. HTML中Meta属性http-equiv="X-UA-Compatible"详解

    HTML下head中的http-equiv="X-UA-Compatible"详解: X-UA-Compatible是针对IE8新加的一个设置,对于IE8之外的浏览器是不识别的,这 ...