AsyncTask的用法
看到篇不错的的文章,是对AsyncTask的使用分析,具体请移步至 悟道:http://www.cnblogs.com/dawei/archive/2011/04/18/2019903.html
文章总体上写的还比较清楚,其中呢有几个细节要注意:
1.凡是联网操作,一定要记得有相应权限:<uses-permission android:name="android.permission.INTERNET" />
2.url地址是带http://的,由于打开浏览器时,我们往往会省略http://,因为浏览器会自动补充,所以别忘了,不然会出的错误提示:
W/System.err(278): java.lang.IllegalStateException: Target host must not be null, or set in parameters.
3.原作者在联网获取网页数据的时候,用了以下操作:
HttpClient client = new DefaultHttpClient(); // params[0]代表连接的url HttpGet get = new HttpGet(params[0]); HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity(); long length = entity.getContentLength(); InputStream is = entity.getContent(); String s = null; if (is != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[128]; int ch = -1, count = 0; while ((ch = is.read(buf)) != -1) { baos.write(buf, 0, ch); count += ch; if (length > 0) { // 如果知道响应的长度,调用publishProgress()更新进度 publishProgress((int) ((count / (float) length) * 100)); } // 让线程休眠100ms Thread.sleep(100); } s = new String(baos.toByteArray()); } // 返回结果 return s;
关于联网取数据的方法很多,主要看采用何种方式联网请求,这里简单写一下,具体的话,有待进一步学习java网络编程的知识。
1.基于url的网络编程,即用Java.net中HttpURLConnection的话可以这样操作,
a.首先构造URL;
b.然后打开连接connection;
c.再取得inputStream;
d.最后可以操作inputstream,一般也是用一个while循环,将数据放到outputStream
2.或者基于客户端网络编程,即可以用apache中HttpClient,那么代码上肯定是有点区别的,上面的文章中就是用的这种方式:
a.首先实例化一个客户端,HttpClient;
b.选择请求方式,可以是Get方式,并设置url参数;
c.发起请求即执行execute,获得响应response;
d.从响应中获取inputstream;
e.这一步就一样了,操作InputStream
那么这两种方法在本文中选择第二种,因为它可以根据响应直接获取网络资源的大小也就是这句代码
long length = entity.getContentLength();
,而URL方式,我没发现有对应方法,应该是不可以的,我们要实现进度条的话,必须有一个已下载的百分比。
网上看了下csdn有篇文章专门介绍了网络编程,他讲的很多,有待考证,
这是地址http://blog.csdn.net/csh624366188/article/details/7331716
最后呢,我把完整代码打包出来了:TestAsyncTask.7z
文章中如果有什么纰漏还请不吝指教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?