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. Class diagrams

    So far we have seen stack diagrams, which show the state of a program, and object diagrams, which sh ...

  2. LA3211 飞机调度 Now or later-二分法&TwoSet

    https://vjudge.net/problem/UVALive-3211 As you must have experienced, instead of landing immediately ...

  3. 学习练习 session练习

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. ICDM 2007

    Language-Independent Set Expansion of Named Entities Using the Web. Chao Wang, Venu Satuluri, Sriniv ...

  5. ionic pull to refresh 下拉更新頁面

    有些項目都用到了下拉更新頁面的效果: 1. 在index.html 中添加ion-refresher 指令 且在我們需要更新內容的外面 添加 如 <ion-refresher pulling-t ...

  6. APUE第一章_课后习题

    /* 未完成的:1.5 不过在下文中已经给出了解答. */ 1.1 在系统上查证,除根目录外,目录.和..是不同的 ans:这个很容易,用vim打开.和..就可以看到区别. 1.2 分析程序清单1-4 ...

  7. Promise机制

    Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...

  8. [原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)

    本文出自:http://blog.csdn.net/svitter 题意: f(x) = K, x = 1 f(x) = (a*f(x-1) + b)%m , x > 1 求出( A^(f(1) ...

  9. ipv4、ipv6的socket同时监听“bind: Address already in use”的解决方法

    创建ipv4和ipv6的socket,同时监听某个端口的ipv4和ipv6报文,运行时bind函数执行失败,提示“bind: Address already in use”.原因:ipv6的socke ...

  10. 通过jquery 获取文本框的聚焦和失焦方法

    我还是喜欢用jquery来实现,不管页面中多少个输入框需要实现聚焦,失焦,都公有,我常用的方法是: 遍历该页面中的input框,获取输入框中的val值,当该输入框聚焦的时候跟存放的oldValue值进 ...