android中的http通讯----(5)客户端解析xml文件
2015-11-24 16:11
507 查看
xml文件也是客户端和服务器之间进行数据传输的重要格式,本案例演示如何在客户端解析服务端发来的xml文件
首先,我们现在服务器端放置xml文件
注意如果是用MyEclipse做服务器端,一定要把xml文件放在WebContent目录下面
girl.xml文件如下:
客户端程序代码:主要要在AndroidManifest.xml文件里面添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
MainActivity.java
我们看到客户端已经解析并显示xml文件的信息!
首先,我们现在服务器端放置xml文件
注意如果是用MyEclipse做服务器端,一定要把xml文件放在WebContent目录下面
girl.xml文件如下:
客户端程序代码:主要要在AndroidManifest.xml文件里面添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
MainActivity.java
package com.example.xmlpage; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.TextView;<strong> </strong>public class MainActivity extends Activity { private TextView textView; private Handler handler = new Handler(); private String Url; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); new XmlThread(Url,handler,textView).start(); } public void init(){ Url = "http://192.168.1.118:8080/MyWebProject/girl.xml"; textView = (TextView)findViewById(R.id.textView); } }<span style="color:#3366ff;font-weight: bold;"> </span>XmlThread.java
package com.example.xmlpage; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import android.os.Handler; import android.widget.TextView; public class XmlThread extends Thread { private String url; private Handler handler; //往handler发送消息 private TextView textView; //往textView设置文本信息 public XmlThread(String url,Handler handler,TextView textView){ this.url = url; this.handler = handler; this.textView = textView; } @Override public void run(){ try { //1.得到url URL httpUrl = new URL(url); //2.得到HttpURLConnection HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection(); //3.设置请求方式 conn.setRequestMethod("GET"); //4.设置超时 conn.setReadTimeout(5000); //5.获得输入流 InputStream in = conn.getInputStream(); //6.解析xml文件,用android原生的pull方法,用XmlPullParserFactory拿到工厂对象 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //7.拿到PullParser XmlPullParser parser = factory.newPullParser(); //8.拿到parser之后,就可以对服务器返回的xml文件进行解析 parser.setInput(in, "UTF-8"); //9.XML解析是基于事件驱动的,首先定义事件类型 int eventType = parser.getEventType(); final List<Girls>list = new ArrayList<Girls>(); Girls girl = null; //10.根据事件类型进行处理 while( eventType != XmlPullParser.END_DOCUMENT){ //获得标签的名字 String data =parser.getName(); switch(eventType){ case XmlPullParser.START_TAG: if("girl".equals(data)){ girl = new Girls(); } if("name".equals(data)){ girl.setName(parser.nextText()); } if("age".equals(data)){ girl.setAge(Integer.parseInt(parser.nextText())); } if("school".equals(data)){ girl.setSchool(parser.nextText()); } break; case XmlPullParser.END_TAG: if("girl".equals(data) && girl!= null){ list.add(girl); } break; default: break; } //手动的调用一下事件处理方法,否则一条走完之后,默认不会动 eventType = parser.next(); } handler.post(new Runnable(){ @Override public void run(){ //打印出list textView.setText(list.toString()); } }); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }Girls.java
package com.example.xmlpage; public class Girls { private String name; private int age; private String school; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } @Override public String toString(){ return "[name=" + name +"age=" + age +"school=" + school +"]"; } }布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>效果图:
我们看到客户端已经解析并显示xml文件的信息!
相关文章推荐
- Ubuntu12.04在无网络环境下配置apt-get光盘源的简单方法
- CURL使用SSL证书访问HTTPS
- 海扁學習與神經網路的同步化(Hebb学习与神经网络的同步化)
- S2SH整合Shiro之:SessionContext must be an HTTP compatible implementation
- 在ASP.NET开始执行HTTP请求的处理程序之前
- http://haojima.net/zhaopei/511.html
- 计算机网络——物理层
- linux网络编程之TCP/IP基础:TCP连接的建立和断开、滑动窗口
- bzoj-1565 植物大战僵尸
- Enumeration遍历http请求参数的一个例子
- 协议森林12 天下为公 (TCP堵塞控制)
- Apache 2.2和升级版2.4的httpd.conf配置差别总结
- 协议森林11 涅槃 (TCP重新发送)
- 网段,子网掩码,网络标识,IP划分
- 协议森林10 魔鬼细节 (TCP滑窗管理)
- bzoj-2502 清理雪道
- iOSReachability判断网络连接状态
- 随机网络和无标度网络
- HttpClient 发送网络请求步骤
- 小世界网络