- 浏览: 236244 次
- 性别:
- 来自: 广东
文章分类
最新评论
-
ryutaku:
楼主,我专门找回原业的用户名和密码来回复你的。view.get ...
Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别 -
ponce:
不错哦,正好用上
android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理(2) -
sunny78117:
gundumw100 写道能不能在Xml配置中设置啊,这样硬编 ...
阻止EditText弹出输入法 -
sulanyan29:
老大,求一份原码。谢谢了: dk_application@16 ...
Android防火墙+流量统计代码 -
seventhfox:
很好的办法 谢谢分享...
阻止EditText弹出输入法
介绍
在 Android 中与服务端做 HTTP 通信,解析 XML,通过 Handler 实现异步消息处理
HTTP 通信 - 与服务端做 HTTP 通信,分别以 GET 方式和 POST 方式做演示
XML 解析 - 可以用两种方式解析 XML,分别是 DOM 方式和 SAX 方式
异步消息处理 - 通过 Handler 实现异步消息处理,以一个自定义的异步下载类来说明 Handler 的用法
1、HTTP 通信和 XML 解析的 Demo
MySAXHandler.java
代码
在 Android 中与服务端做 HTTP 通信,解析 XML,通过 Handler 实现异步消息处理
HTTP 通信 - 与服务端做 HTTP 通信,分别以 GET 方式和 POST 方式做演示
XML 解析 - 可以用两种方式解析 XML,分别是 DOM 方式和 SAX 方式
异步消息处理 - 通过 Handler 实现异步消息处理,以一个自定义的异步下载类来说明 Handler 的用法
1、HTTP 通信和 XML 解析的 Demo
MySAXHandler.java
代码
package com.webabcd.communication; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; // 继承 DefaultHandler 以实现指定 XML 的 SAX 解析器 // DOM - W3C 标准,需要把 xml 数据全部加载完成后才能对其做解析,可对树做任意遍历 // SAX - 流式解析,通过事件模型解析 xml,只能顺序解析 public class MySAXHandler extends DefaultHandler { private boolean mIsTitleTag = false; private boolean mIsSalaryTag = false; private boolean mIsBirthTag = false; private String mResult = ""; // 打开 xml 文档的回调函数 @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } // 关闭 xml 文档的回调函数 @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } // 一发现元素开始标记就回调此函数 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (localName == "title") mIsTitleTag = true; else if (localName == "salary") mIsSalaryTag = true; else if (localName == "dateOfBirth") mIsBirthTag = true; else if (localName == "employee") mResult += "\nname:" + attributes.getValue("name"); } // 一发现元素结束标记就回调此函数 @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (localName == "title") mIsTitleTag = false; else if (localName == "salary") mIsSalaryTag = false; else if (localName == "dateOfBirth") mIsBirthTag = false; } // 一发现元素值或属性值就回调此函数 @Override public void characters(char[] ch, int start, int length) throws SAXException { if (mIsTitleTag) mResult += new String(ch, start, length); else if (mIsSalaryTag) mResult += " salary:" + new String(ch, start, length); else if (mIsBirthTag) mResult += " dateOfBirth:" + new String(ch, start, length); } public String getResult(){ return mResult; } } Main.java 代码 package com.webabcd.communication; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.ByteArrayBuffer; import org.apache.http.util.EncodingUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { private TextView textView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView) this.findViewById(R.id.textView); Button btn1 = (Button) this.findViewById(R.id.btn1); btn1.setText("http get demo"); btn1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { httpGetDemo(); } }); Button btn2 = (Button) this.findViewById(R.id.btn2); btn2.setText("http post demo"); btn2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { httpPostDemo(); } }); Button btn3 = (Button) this.findViewById(R.id.btn3); // DOM - Document Object Model btn3.setText("DOM 解析 XML"); btn3.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { DOMDemo(); } }); Button btn4 = (Button) this.findViewById(R.id.btn4); // SAX - Simple API for XML btn4.setText("SAX 解析 XML"); btn4.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { SAXDemo(); } }); } // Android 调用 http 协议的 get 方法 // 本例:以 http 协议的 get 方法获取远程页面响应的内容 private void httpGetDemo(){ try { // 模拟器测试时,请使用外网地址 URL url = new URL("http://xxx.xxx.xxx"); URLConnection con = url.openConnection(); String result = "http status code: " + ((HttpURLConnection)con).getResponseCode() + "\n"; // HttpURLConnection.HTTP_OK InputStream is = con.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer bab = new ByteArrayBuffer(32); int current = 0; while ( (current = bis.read()) != -1 ){ bab.append((byte)current); } result += EncodingUtils.getString(bab.toByteArray(), HTTP.UTF_8); bis.close(); is.close(); textView.setText(result); } catch (Exception e) { textView.setText(e.toString()); } } // Android 调用 http 协议的 post 方法 // 本例:以 http 协议的 post 方法向远程页面传递参数,并获取其响应的内容 private void httpPostDemo(){ try { // 模拟器测试时,请使用外网地址 String url = "http://5billion.com.cn/post.php"; Map<String, String> data = new HashMap<String, String>(); data.put("name", "webabcd"); data.put("salary", "100"); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); ArrayList<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>(); for (Map.Entry<String, String> m : data.entrySet()) { postData.add(new BasicNameValuePair(m.getKey(), m.getValue())); } UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData, HTTP.UTF_8); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); String result = "http status code: " + response.getStatusLine().getStatusCode() + "\n"; // HttpURLConnection.HTTP_OK HttpEntity httpEntity = response.getEntity(); InputStream is = httpEntity.getContent(); result += convertStreamToString(is); textView.setText(result); } catch (Exception e) { textView.setText(e.toString()); } } // 以 DOM 方式解析 XML(xml 数据详见 res/raw/employee.xml) private void DOMDemo(){ try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.parse(this.getResources().openRawResource(R.raw.employee)); Element rootElement = doc.getDocumentElement(); NodeList employeeNodeList = rootElement.getElementsByTagName("employee"); textView.setText("DOMDemo" + "\n"); String title = rootElement.getElementsByTagName("title").item(0).getFirstChild().getNodeValue(); textView.append(title); for (int i=0; i<employeeNodeList.getLength(); i++){ Element employeeElement = ((Element)employeeNodeList.item(i)); String name = employeeElement.getAttribute("name"); String salary = employeeElement.getElementsByTagName("salary").item(0).getFirstChild().getNodeValue(); String dateOfBirth = employeeElement.getElementsByTagName("dateOfBirth").item(0).getFirstChild().getNodeValue(); textView.append("\nname: "+name+" salary: "+salary+" dateOfBirth: " + dateOfBirth); } } catch (Exception e) { textView.setText(e.toString()); } } // 以 SAX 方式解析 XML(xml 数据详见 res/raw/employee.xml) // SAX 解析器的实现详见 MySAXHandler.java private void SAXDemo(){ try { SAXParserFactory saxFactory = SAXParserFactory.newInstance(); SAXParser parser = saxFactory.newSAXParser(); XMLReader reader = parser.getXMLReader(); MySAXHandler handler = new MySAXHandler(); reader.setContentHandler(handler); reader.parse(new InputSource(this.getResources().openRawResource(R.raw.employee))); String result = handler.getResult(); textView.setText("SAXDemo" + "\n"); textView.append(result); } catch (Exception e) { textView.setText(e.toString()); } } // 辅助方法,用于把流转换为字符串 private String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } }
发表评论
-
Fragments (Android官方文档中文版)
2011-09-14 16:32 2843概述 Fragment ... -
MediaScanner 研究
2011-05-03 19:41 1728转载http://www.iteye.com/topic/69 ... -
【Android】Uri、UriMatcher、ContentUris详解
2011-04-29 15:14 35161.Uri 通用资源标志符(Universal Resour ... -
Android事件处理
2011-01-04 11:07 2408转载:http://blog.csdn.net/G_rrrr/ ... -
Paint类常用方法
2010-11-20 15:04 1464Paint类常用方法: void setARGB(int ... -
自定义View 常用方法
2010-11-20 15:03 3885自定义View的常用方法: ... -
Android onSaveInstanceState和onRestoreInstanceState触发的时机
2010-11-16 21:46 4882先看Application Fundamentals上的一段 ... -
Activity有四种状态
2010-11-02 22:28 1749Activity有四种状态: 处于屏幕最前端的Activ ... -
介绍Android中与JSON相关的应用
2010-10-23 12:57 1912转载:http://www.j2bb.com/tr ... -
Android TextView(EditView)文字底部或者中间 加横线
2010-10-14 20:16 5173promotionLinkText = (TextView) ... -
转载:Handler方法小结(在线程中更新UI和了解HandlerThread类的用法)
2010-09-11 09:45 2757小结: * 1、向哪个Handler 发送消息,就必 ... -
卸载程序和监听卸载事件
2010-09-07 08:28 2463package com.TestUI; import j ... -
shape的使用
2010-08-20 17:47 2658<!—显示一条虚线 --> &l ... -
Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
2010-08-15 14:51 14535ListView.getCount()(实际上是 Adapte ... -
Android中Bitmap, Drawable, Byte之间的转化
2010-08-15 14:47 28541. Bitmap 转化为 byte ByteArrayO ... -
Uri常用方法
2010-07-29 15:47 11727Uri uri = Uri.parse("conte ... -
调用系统内部 searchUI的基本用法
2010-07-19 22:36 3007/* 按下键盘即调用搜索框 */ setDef ... -
Android改变窗口标题栏的布局
2010-07-15 14:35 2341一般应用的Title都是建立应用时在AndroidManife ... -
Activity之间实现动画的切换
2010-07-14 11:02 2287在startActivity 后调用 overridePend ... -
向Web站点发送GET请求、POST请求
2010-06-09 22:04 2788public class TestGetPost { /* ...
相关推荐
在Android开发领域,Handler是实现线程间通信的重要机制,特别是在UI更新和异步任务处理中扮演着核心角色。标题“hander_sy1.rar_android”表明这是一个关于Android Handler的实例教程,适合初学者进行学习。下面...
- 学习案例可能包含使用`Runnable`配合`postDelayed()`来实现异步操作和延时处理。 6. **理解Android生命周期**: - 在Activity或Service中使用Handler时,需要注意生命周期管理。当组件销毁时,必须确保移除所有...
在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...
在Android开发中,Handler是一种非常重要的组件,它与线程通信密切相关,特别是在更新UI和处理异步任务时。本文将深入探讨如何利用Handler构建一个图片浏览器,并结合计时器(Timer)来实现特定功能。 首先,理解...
在Android开发中,Handler是一种非常重要的机制,它用于在主线程和子线程之间进行通信,处理异步消息。本文将深入探讨Handler的使用,并结合给出的标签"源码"和"工具"来分析其核心原理。 首先,我们了解Handler的...
在Android开发中,异步处理是一项至关重要的技术,主要用于解决主线程执行耗时操作导致的UI卡顿问题。本示例“android 异步刷新demo”着重演示了两种常见的异步处理方式:AsyncTask和Handler,帮助开发者理解它们的...
在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,它们共同构建了一个消息处理机制。这个机制允许开发者在不同的线程之间传递消息,通常用于更新UI或者执行异步任务。下面我们将深入...
那么异步消息处理可以用哪呢? 1、用于UI线程当Bitmap加载完成后更新ImageView 2、在图片加载类初始化时,我们会在一个子线程中维护一个Loop实例,当然子线程中也就有了MessageQueue,Looper会一直在那loop停着等待...
总结起来,"Laravel开发-lumen-api-handler"项目主要关注的是如何在Lumen中实现高效且用户友好的API异常处理。通过自定义异常处理器和中间件,我们可以定制化错误响应,提高API的质量和稳定性。这不仅提升了开发效率...
总结起来,通过Handler和TimerTask实现的简易定时器利用了Java的定时任务机制和Android的消息处理机制,可以在指定的间隔内周期性地执行任务。这种实现方式简单易懂,适用于许多基本的定时需求。但在复杂的应用场景...
处理程序是接口`javax.xml.rpc.handler.Handler`的实现,它们在消息发送前和接收后被调用,可以用来执行额外的逻辑,如添加安全头部信息。 对于"jax_rpc webservices hander头增加用户密码",这通常指的是在SOAP...
Handler是Android中处理异步消息的关键组件,它与Looper和Message紧密配合工作。Looper是消息循环,它持续检查Message Queue(消息队列),并将消息分发给相应的Handler进行处理。Message是实际携带数据的实体,而...
1. **异步任务**:如网络请求或耗时计算等,这些任务可以在子线程中执行,然后通过`Handler`机制将结果传回主线程进行UI更新。 2. **定时任务**:例如定时刷新UI或执行某个周期性的动作,可以通过`Handler`的`...
Android Handler机制是Android异步消息处理的核心,它用于在主线程和子线程之间进行通信,确保UI更新在主线程中执行。以下是对Handler机制实现原理的详细解析: 1. **Handler**: Handler类是消息处理的中心,它有两...
Android之Web Service实现天气预报查询 利用Ksoap实现Web Service功能,大家自己练习的时候需要用到Ksoap2包,下载地址为 http://download.csdn.net/detail/hander_wei/5713765
`Handler`是Android消息处理机制的核心部分,它与`Looper`和`Message`共同协作,实现了线程间的消息传递。`Handler`通常在主线程(UI线程)中创建,用于接收并处理来自其他线程的消息。 ### 2. Handler工作原理 - ...
(1)理解HTTP协议、URL请示的类别 (2)理解并掌握Android的线程与Hander消息机制 (3)学会使用HttpURLConnection访问网络 (4)学会使用HttpClient访问网络
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...通过用户登录信息与数据库的ID相匹配,通过Android定时器按一定周期生产温度数据,同时通过线程来周期绘制温度趋势的UI界面(Hander处理)).zip
Handler是Android中用于发送和处理消息的处理者,它可以在不同的线程之间传递消息。Handler可以发送消息给其他线程,也可以处理从其他线程传递来的消息。Handler的主要方法包括sendMessage()方法和handleMessage()...