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. linux C中va_list用法

    #include <stdio.h> #include <stdarg.h> int demo( int, ... ); int main( void ) { demo(1, ...

  2. MongoDB 2: 安装和使用

    导读:上篇博客中简单介绍了MongoDB,本篇文章主要是介绍Mongo的安装和使用(环境为win8).(PS:这是一篇没什么技术含量的文章,仅是个人的笔记式文档)下一篇博客,将介绍Mongo使用过程中 ...

  3. ajax contenttype

    jquery ajax基本形式: $.ajax({ type: 'POST/get', url: '', data: {"n":n,"m":m}, dataTy ...

  4. 【qt4.8.6】qt-everywhere-opensource-src-4.8.6静态库编译,搭建vs2010 + Qt4.8.6环境

    公司的电脑上无法运行QtCreator, 又想用Qt,只能搞vs2010+Qt了, 看到运行时要链接一个几M到十几M的QtCore.dll和QtGui.dll,又有一种在用C#写的程序的感觉,很不爽, ...

  5. c# winform 关于DataGridView的一些操作(很全,绝对够用)

    转自:http://heisetoufa.iteye.com/blog/405317 设置字段名 设置字段值 设定单元格表示 Error图标 设定当前单元格 取得当前单元格内容 取得当前单元格的列 I ...

  6. Linux 之dhcp服务搭建

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议 dhcp服务器端监控端口67 涉及的配置文件:/etc/dhcp/dhcpd ...

  7. 【风马一族_mysql】MySQL免安装版环境配置图文教程

    mysql存放在某一个磁盘中(笔者使用E盘) 配置系统变量 打开 电脑的属性 点击 高级系统设置 选择 高级 点击 环境变量 选择 系统变量 点击 变量Path,追加 值 E:\mysql-5.6.2 ...

  8. MyEclipse使用手册(详细版)

    0. 快捷键================================================================================编辑:Ctrl+Shift+ ...

  9. centos6.5下yum安装lnmp(适合刚入职的新手的方法)

    新入职的员工,开始的时候都是让配环境,本地写代码用的wamp,在lnmp或lamp测试,除非有些土豪公司 用的是(果机). 另外安装时,把整个流程在脑子里先过一篇(记不全也没关系,一回生二回熟),重在 ...

  10. 华为OJ-合唱队

    华为OJ-初级题-合唱队 思路与分析 本题可以用DP的方法,分别从正向和逆向的两个方向求,该数组即186 186 150 200 160 130 197 200的上升对大序列.正向为[1, 1, 1, ...