使用AsyncTask异步任务下载数据

22、Android应用网络数据处理:下载、上传与服务使用 本文详细介绍了Android应用中网络数据的下载与上传处理技术。通过AsyncTask实现问题批次的异步下载,并使用ProgressDialog提升用户体验;利用Android Service结合AsyncTask在后台安全上传玩家设置和头像数据。文章涵盖HTTP GET/POST请求的使用、多部分MIME数据处理、唯一标识符生成、第三方库集成等关键技术,并提供流程图与代码示例,帮助开发者构建稳定高效的网络通信功能。同时强调了数据安全、资源管理和兼容性等注意事项,适合有一定Android开发基础的读者深入学 阅读详情

1.使用异步任务的原因:
①.android 4.0开始主线程不能执行耗时任务(网络连接,数据库访问,文件的读取)。
不能在主线程执行的原因:
android的主线程也叫UI线程,专门响应用户的点击事件等,必须能够快速的响应。
网络连接容易堵塞,UI线程超过5s没有响应用户请求,会弹出无响应关闭对话框提醒用户终止应用程序。
②子线程不能修改UI,所以就有了异步任务来处理数据。

2.同步与异步的区别:
同步:一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

异步:进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,提高执行的效率。
异步执行顺序:先执行子线程的方法doInBackground(),得到结果,传到主线程。再执行主线程onPostExcite();跟新UI。

代码展示:
1.MainActivity的代码:

 private void downloadData() {
       String urlString ="http://www.51kan.com.cn/lolservice/newlolitemsbytype.jsp?type=attack&start=0";
       // String urlString = "http://api.1-blog.com/biz/bizserver/xiaohua/list.do?size=20&page=0";
        MyAsyncTask task = new MyAsyncTask(new OnTaskCompletedListneter() {
            @Override
            public void onTaskCompleted(List<Lol> lolList) {
            //把返回的结果添加到List集合中,并通知适配器更新
                //lolList.addAll(lolList);
               // adapter.notifyDataSetChanged();
                Log.i("下载解析完返回的数据:",lolList.toString());

            }
        });
        task.execute(urlString);
    }
}

2.MyAsyncTask 类的代码:

public class MyAsyncTask extends AsyncTask<String,Void,List<Lol>> {
    //自定义一个接口,监听器,并把结果返回
    public interface OnTaskCompletedListneter{
        void onTaskCompleted(List<Lol> lolList);
    }
    //构造方法
    private  OnTaskCompletedListneter listneter;
    MyAsyncTask(OnTaskCompletedListneter listneter){
        this.listneter = listneter;
    }
    //先执行子线程的方法doInBackground(),在这个方法执行耗时操作
    @Override
    protected List<Lol> doInBackground(String... strings) {
        //1. 连接网络,进行下载
        String urlString = strings[0];
        String jsonString = HttpUril.downloadString(urlString);
        Log.i("下载到的数据",jsonString);
        //进行解析
        List<Lol> retList = JsonParser.parse(jsonString);
        return retList;

    }

    //下载解析到结果,再执行主线程onPostExcite(),传到主线程。跟新UI。
    @Override
    protected void onPostExecute(List<Lol> retList) {
        if(listneter!=null&&retList!=null){
            listneter.onTaskCompleted(retList);
            Log.i("解析到的数据",retList.toString());//打印解析到的数据
        }
    }


}
Android开发中使用AsyncTask异步下载与解析数据 本文深入探讨了在Android开发中如何使用AsyncTask类来异步下载网络数据并解析,同时保持用户界面响应。文章详细描述了如何在后台任务中填充UI控件,以及如何处理任务的执行、取消和进度更新。此外,还展示了如何在用户界面中适当地显示进度指示器,并在下载完成后更新界面显示,以及如何处理可能出现的取消操作。 阅读详情

相关推荐

海思Hi3516平台集成IMX214 Sensor实战:从I2C调试到VI通路构建

本文详细记录了在海思Hi3516平台上集成索尼IMX214图像传感器的完整实战过程。从硬件I2C通讯调试、驱动层适配,到上层VI通路构建与ISP配置,提供了系统性的排查步骤与代码修改要点,旨在帮助开发者快速打通从Sensor到屏幕的完整视频采集链路,解决集成过程中的常见问题。

tcp8optimizer的博客 596

Android异步任务处理之AsyncTaskLoader的使用

最近项目中涉及到加载本地的地名.db文件,数据量大,自然不能直接放在UI线程中操作,好在Google在Android3.0以后,提供了AsyncTaskLoader来做一些耗时的异步任务。一 官方对AsyncTaskLoader的定义及特点介绍如下:Abstract Loader that provides an AsyncTask to do the workIntroduced in Andro

happy_horse的博客 9958

R语言实战:GEO单细胞数据下载与自动化整理全流程(附代码)

本文详细介绍了使用R语言从GEO数据库下载scRNA-seq数据并实现自动化整理的完整流程。通过GEOquery和Seurat等工具包,读者可以高效获取单细胞RNA测序数据,完成从原始数据下载到预处理的全过程,最终生成可直接用于分析的Seurat对象。文章包含完整代码示例,特别适合生物信息学研究者处理单细胞数据。

weixin_29061821的博客 427

使用AsyncTaskLoader获取本地数据(图片)

在项目中用到了AsyncTaskLoader来获取本地的图片,没错,就是它,不是AsyncTask;刚看见这个类的时候有些疑惑,想必它肯定和AsyncTask有什么联系,于是网上查找了一些资料,其实它们最主要的区别就是:AsyncTaskLoader只用来获取数据,它不考虑和UI交互,而AsyncTask可以获取数据并将数据展示在UI上。于是,写了一个demo使用AsyncTaskLoader类来

wyb112233的专栏 680

winpcap无法安装提示新版本已经安装解决办法

问题显示如下该问题会导致ensp里的云识别不到网卡可能是因为之前安装了npcap,而且安装时勾选了第四个选项导致无法安装,需要完全卸载npcap解决办法:办法一:在控制面板的程序与卸载里面卸载npcap和winPcap,然后再安装winPcap,如果搜不到往下看办法二:在C:\Windows\SysWOW64目录下搜索wpcap.dll和packet.dll并重命名为wpcap.dll.old和packet.dll.old办法三:如果搜不到这两个文件需要安装win10Pcap才能找到这两个文件下载地址:Wi

qq_73202377的博客 3万+

从VBA到Python:探索CODE V API在MTF数据分析中的跨语言实践

本文详细介绍了如何从VBA转向Python,利用CODE V API实现MTF数据分析的高效工作流。通过Python的科学计算库和现代API设计,光学工程师可以大幅提升数据处理和可视化效率,实现自动化报告生成和性能优化。

weixin_29239661的博客 441

AsyncTaskLoader的基本用法

AsyncTaskLoader的基本用法

橡果生长记的博客 2663

【科研绘图】【数据拟合曲线】:附Origin详细画图流程

拟合曲线图

weixin_50236590的博客 4万+

使用AsyncTaskLoader动态载入SQLite数据

Andorid API Guides中有一章节ListView讲解了如何使用CursorLoader动态载入数据。但CursorLoader只支持Content Provider,实际上在很多小应用中都用不到Content Provider。我尝试继承CursorLoader的父类也就是AsyncTaskLoader实现了一个简单的动态载入SQLite数据的方案。如有不当之处希望指正。 Note

Patrick Xu的专栏 1426

国产PHY芯片YT8512H替代LAN8742A的实战指南(STM32F407平台)

本文详细介绍了在STM32F407平台上,使用国产PHY芯片YT8512H替代LAN8742A的完整实战过程。文章深入剖析了硬件设计中的关键信号连接差异(如CRS_DV与RXDV复用)、时钟布线要点,并提供了软件驱动修改、PHY配置及调试排错的系统指南,旨在帮助工程师高效完成国产化替代,规避常见陷阱。

defi6farmer的博客 854

树莓派 5 AI 套件(Hailo)示例

该用户自定义类作为输入传递给回调函数,该函数在管道输出上运行。它用于主程序与回调函数之间的通信。它对 hailo_rpi_common::app_callback_class 进行了扩展,并可根据应用程序的具体情况定制附加变量和方法。

机器人控制与仿真应用 4115

一种异步保存的思路

当用户进行了post操作之后,后台可能会做很多的操作。 比如说,创单人录入一条工单,点击“提交”之后。后台需要将工单数据写入数据库,然后要计算工单关联关系,计算任务优先级,进行工单智能分析,进行预调度等等操作 这些操作涉及到大量的IO,以及逻辑判断,因此要耗费比较长的时间。 但是对于创单人来说,他关注的首先是这条工单创建是否成功,也就是是否能够尽快得到创建成功的反馈页面。 那么这个时候,就

kyfxbl 1633

AgentScope 2.0 API完全指南:构建企业级AI智能体应用的技术实践

本文系统梳理AgentScope 2.0框架的完整API体系,涵盖智能体核心引擎、统一模型适配层、工具系统、消息协议、权限控制与工作空间管理等七大核心模块。通过深入的源码级分析与架构图示,详细解读Agent类的推理-行动循环、ChatModelBase的多模型抽象、Toolkit的工具管理机制、ContentBlock的多模态内容表达、PermissionEngine的安全决策流程,以及Local/Docker/E2B三种工作空间实现。文章还提供了智能客服系统的完整实战案例,展示从自定义工具开发到流式服务部

program哲学 406

AsyncTask-异步任务

AsyncTask是android 1.5提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。 优点:简单快捷、过程可控 AsyncTask的使用步骤: 1 添加一个类,继承AsyncTask,并设置相应参数 2 重写四个方法 onPreExecute()  该方法

u010037865的博客 1292

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

异步任务-AsyncTack基本使用

AsyncTask的基本使用方法   在Day25我们讲解了Handler, 可以实现子线程数据传递到主线程(UI线程) 中去, 这样可以解决一些网络下载, 文件传输等需要子线程的完成的工作, 但是它也有一个小瑕疵 , 就是封装性不够好, 那就今天我们就要来说一下AsyncTask 介绍一下如何使用1, 继承AsyncTaskpublic class MyTask extends AsyncT

张鹿鹿的专栏 1856

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

异步任务的工具类

*由于在开发的过程中用异步任务下载的东西一般是json和图片 *所以本工具类只涉及到这两种类型,如果有兴趣,再或者有其他的需求的话,自己可以扩充工具类的功能import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConne

雪中的烈焰 1241

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

AsyncTask学习笔记

AsyncTask介绍AsyncTask是一个轻量级的处理线程更新Android UI 的方式,AsyncTack是个抽象类,使用时应该继承它,它定义了3个泛型 1. Params:启动任务执行时输入的参数 2. Progress:后台任务完成时的数据类型 3. Result:后台任务结束时返回的数据类型 AsyncTask使用 1. 为上面三个泛型指定具体数据类型 2. 必须实现doInBa

SiMaXiaoChen的博客 474

详解Android中AsyncTask的使用

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制。关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下。

龙杰的博客 383

android异步任务处理(网络等耗时操作)

在实际应用中经常会遇到比较耗时任务的处理,比如网络连接,数据库操作等情况时,如果这些操作都是放在主线程(UI线程)中,则会造成UI的假死现象(android4.0后也不许放在UI线程),这可以使用AsyncTask和Handler两种异步方式来解决这种问题。 AsyncTask(异步任务处理)在使用AsyncTask时处理类需要继承AsyncTask,提供三个泛型参数,并且重载As...

axs441702的博客 556

android多线程asyncTask与Handler用法

一、Handler Handler是一个用作线程之间相互通信的类。 Handler一共由四个部分组成 handler,Message,MessageQueue,Looper。其中: handler是用来发送消息的,message可以携带少量信息,MessageQueue是一个消息队列,而Looper是一个管理消息队列的类。当一条message通过handler的sendmessage方法被发送以后,这条消息就会加入到MessageQueue队列中,等待被发送到handler对象的回调方法handler

zzf0521的博客 420

86.Android Http 【异步任务】【该方法较好】

1.案例1是利用异步任务从网上下载图片[结果与上例相同] 注意AsyncTask泛型的三个参数:String是URL,Integer是内部的Progress,Bitmap是返回的结果,也是onPostExecute方法的参数。 2.案例2是利用异步任务从服务器获取Json字符串转成需要的表格 (1)Web服务器在本地 通过一个Servlet输出一个Json字符串 ...

232

AsyncTask入门(二)

在它的代码中,AsyncTask是你拓展的一个抽象类,和提供用于一个耗时的异步任务的基本框架。 最恰当的一个描述AsyncTask的方式是把它当作一个工作线程三明治。也就是说,它有三个主要的方法可以提供给你实现。 onPreExecute 发生在主线程,是它的第一片面包干。它建立任务,准备载入对话框,和提醒用户将要发生的事。 onInBackground 是这个小任务三明治的肉饼(也是必要的

zfireear的博客 314

android 后台耗时,android教程之使用asynctask在后台运行耗时任务

, Android中实现了默认的进度提示对话框,即ProgressDialog,通过实例化和一些简单设置,就可以使用了。private class DownloadDBTask extends AsyncTask {// 可变长的输入参数,与AsyncTask.exucute()对应ProgressDialog pdialog;public DownloadDBTask(Context conte...

weixin_33960567的博客 189

Android之AsyncTask的用法

为什么要使用AsyncTask? 在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理

lostinai的专栏 512

第0天异步任务标准写法

第0天异步任务标准写法异步任务一.宗旨:不能写内部类二.AsyncTask实现网络下载数据,构造传参数三.Thread+Handler+接口回调实现网络下载数据 异步任务 一.宗旨:不能写内部类 二.AsyncTask实现网络下载数据,构造传参数 (1)布局文件:activity和item布局省略: (2)适配器代码:省略: (3)activity代码:MainActivity.java代码 pu...

qq_34178710的博客 341

在异步加载 AsyncTask 中用动态的数组作为参数

分析问题:在异步执行的时候,                           new DownloadTextTask().execute("http://192.168.1.56:30002/?ID=101&NO=0",                                                                                  

u011081756的专栏 1689
上一篇: 使用Handler下载数据
下一篇: TextView属性大全+单行显示长文本
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值