android多线程读取网页内容
android必须使用子线程才能够做耗时操作,这点虽然比较符合优秀应用的特点,但是多线程真是让人有点头疼,不管怎么样,那几个runable,handler什么的,我真心记不住它里面有些什么,所以我写篇博文,把我以前的android多线程代码贴上来,等忘掉的时候好来看看。
private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what){case 1:viewPager.setCurrentItem(currentItem);// 切换当前显示的图片break;case 2:if(title!=null){ListView newsList = (ListView)findViewById(R.id.homepage_newslist);ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();HashMap<String, String> item;for(int i =0;i<title.length;i++){item=new HashMap<String, String>();item.put("titile", title[i]);item.put("time", time[i]);list.add(item);}SimpleAdapter adapter = new SimpleAdapter(Homepage.this,list,R.layout.homepagelistitem,new String[]{"titile","time"},new int[]{R.id.homepage_newstitle,R.id.homepage_newstime});newsList.setAdapter(adapter);//for(int i =0;i<bitstr.length;i++){titles[i] = bitstr[i];}if(bitUrl!=null){bit = new Bitmap[5];Runnable thread = new Runnable(){@Overridepublic void run(){//这里下载数据try{for(int m=0;m<bitUrl.length;m++){URL url= new URL(bitUrl[m]);HttpURLConnection conn= (HttpURLConnection)url.openConnection();conn.setDoInput(true);conn.connect();InputStream inputStream=conn.getInputStream();bit[m]= BitmapFactory.decodeStream(inputStream);}Message msg=new Message();msg.what=3;handler.sendMessage(msg);}catch(MalformedURLException e1){e1.printStackTrace();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace(); }}};new Thread(thread).start();}}break;case 3:if(bit!=null){for(int j=0;j<bit.length;j++){ImageView p_w_picpathView = new ImageView(Homepage.this);p_w_picpathView.setImageBitmap(bit[j]);p_w_picpathView.setScaleType(ScaleType.FIT_XY);p_w_picpathViews.add(msg.arg1, p_w_picpathView);}}else{Toast.makeText(getApplicationContext(), "加载图片失败,请检查网络",Toast.LENGTH_SHORT).show();}break;}};};
以上为主线程的Ui更改代码,msg.what == 1的时候是一个图片切换的消息,大家忽略它
msg.what == 2表示从网络中已经获取到了文字信息,可以更新了文字显示了,我将文字放在了一个listview里面,所以用了SimpleAdapter还有数组。。
msg.what == 3表示图片下载好了,可以装载图片了,也是用来更新UI的代码。。
网页文字下载函数,同时获取图片地址:
Runnable thread = new Runnable(){@Overridepublic void run() {//这里下载数据try{URL url= new URL("http://xx.xx.xx.xx/MobileApp/QueryShopInfo.aspx?userid=EMHHBMDTAw4=");HttpURLConnection conn= (HttpURLConnection)url.openConnection();conn.setDoInput(true);conn.connect();InputStream inputStream=conn.getInputStream();if(inputStream!=null){int length = conn.getContentLength();byte [] buffer = new byte[1024];inputStream.read(buffer);for (int j = 0; j < buffer.length; j++) {if (buffer[j] == 0) {length = j;break;}}byte [] buf=new byte[length];System.arraycopy(buffer, 0, buf, 0, length);String temp1= EncodingUtils.getString(buf, "GB2312");temp1 = temp1.trim();String[] temp2 =temp1.split("&");String[] temp21 = temp2[0].split("#");String[] temp22 = temp2[1].split("#");int i;title = new String[temp22.length];time = new String[temp22.length];;URL =new String[temp22.length];for(i=0;i<temp22.length;i++){String[] temp = temp22[i].split("\\|");title[i] = temp[0];time[i] = temp[1];URL[i] = temp[2];}bitstr = new String[temp21.length];bitUrl = new String[temp21.length];for(i=0;i<temp21.length;i++){String[] temp = temp21[i].split("\\|");bitstr[i] = temp[0];bitUrl[i] = temp[1];}Message msg=new Message();msg.what=2;handler.sendMessage(msg);}}catch(MalformedURLException e1){e1.printStackTrace();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}catch (Exception e){e.printStackTrace();}}};new Thread(thread).start();
}
下面是图片读取函数:
Runnable thread = new Runnable(){@Overridepublic void run(){//这里下载数据try{for(int m=0;m<bitUrl.length;m++){URL url= new URL(bitUrl[m]);HttpURLConnection conn= (HttpURLConnection)url.openConnection();conn.setDoInput(true);conn.connect();InputStream inputStream=conn.getInputStream();bit[m]= BitmapFactory.decodeStream(inputStream);}Message msg=new Message();msg.what=3;handler.sendMessage(msg);}catch(MalformedURLException e1){e1.printStackTrace();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace(); }}};new Thread(thread).start();
大家可能已经在第一个代码段中看到了上面这部分代码,这是因为我要在读取到网页文字信息的同时来开辟新的下载线程下载这些图片,总之就这样。。。
转载于:https://blog.51cto.com/shisongran/1203445
android多线程读取网页内容相关推荐
- QML中用C++多线程读取网页内容
在一开始我想在网页上爬取一些内容所以我想到了C++中的 QNetworkAccessManager 类 然后很自然的写了 QNetworkRequest request;request.setUrl( ...
- android 读取 网页,Android读取网页内容
1.修改AndroidManifest.xml文件 2.网页读取类 package com.neohope.android.web; import java.io.ByteArrayOutputStr ...
- Android多线程机制
问题 1)为何需要多线程? 在android中,在主线程中如果耗时太长会出现ANR(android not Responding),也就是看起来很卡: 一些下载图片,下载数据等耗时操作需要在其他线程执 ...
- 第十章 进程间的通信 之 Java/Android多线程开发(二)
文章目录 (一)Java 多线程开发 1.1)线程状态 1.2)线程控制方法 (1.2.1)Synchronized (1.2.2)Volatile (1.2.3)ReentrantLock 1.3) ...
- Android多线程下载断点续传
先上图看卡结果: GITHUB:Android多线程下载断点续传 下载杵这儿 如图所示点击下载就开始下载,点击停止就会停止再次点击下载就会接着下载了. 设计思路是这样的: 首先通过广播将下载信息传递给 ...
- android多线程下载3
今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...
- android 多线程断点续传下载
今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...
- android 多线程断点下载,listview 模式 开始 暂停等功能
android 多线程断点下载,listview 模式 代码依次如下: 布局: <?xml version="1.0" encoding="utf-8"? ...
- 探索 Android 多线程优化方法
前言 1. 基本介绍 在我学习 Android 多线程优化方法的过程中,发现我对多线程优化的了解太片面. 写这篇文章的目的是完善我对 Android 多线程优化方法的认识,分享这篇文章的目的是希望大家 ...
最新文章
- mysql nextval同步锁_mysql中实现类似oracle中的nextval函数
- jupyter安装与初探
- 云计算模型 - 1. 概述
- mysql dba系统学习(2)了解mysql的源码目录及源文件
- 【python图像处理】python绘制饼状图
- ARM Cortex-M3相比于ARM其他系列微控制器的优势和特点
- Redis高效性探索--管道
- 非插件实现回复可见效果
- 内存还剩余很多,却使用 swap 分区
- STL之ForwordList
- http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
- 读计算机网络得学五笔吗,电脑五笔打字难不难学?大约要学多久才可以掌握?
- linux 文件锁 超时,Linux中的两种文件锁——协同锁与强制锁
- 2004年11月网络工程师级试题
- EPICS记录参考1--EPICS概要
- 数字逻辑 课程设计 多功能电子钟 Quartus II
- Java学习——java语言概述
- 检验身份证的正确性(Golang版本)
- 找二叉树根节点到叶子结点最长路径
- 5G投资稳步下降:三大运营商CAPEX支出集体“转向”
热门文章
- 【ubuntu】安装之后要安装的一些东西
- Request.From,Request.QueryString转对象
- #include 和#include“”的区别
- java 字符串排序
- 先进驾驶辅助系统ADAS一些技术应用小结
- 文本深度表示模型Word2Vec
- webapi 返回类型
- mongodb 主从配置,带auth验证模式
- 2014百度研发真题及其解析-求比指定数大且最小的“不重复数”
- ckeditor_4.5.10_full,ckfinder_aspnet_2.6.2,插件使用