android之PULL解析XML(使用SSH框架服务端生成XML)
2017-02-24 23:44
513 查看
今天我们一起通过一个底层原理的小例子来学习一下使用PULL解析器解析XML文件
下面是一些实现功能的效果如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/2f387b4a8740da18d80c026ecf6b29a3)
(1)首先要是服务端生成XMl先写一个jsp页面
写一个实体类Person类
然后文件的struts配置文件要配置好
从数据库里面查数据展示生成xml
生成xml文件展示数据库的数据
生成的xml文件如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/78fa2f6436016c1847e79c586cca5b32)
上面是使用SSH框架服务端生成XML接下来是使用Pull解析xml文件数据展示到android上效果如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201702/22afc035e9b4c9eb4fe4785f33b21f8f)
(2)我这里是个简单的布局文件
接下来是MainActivity的文件
最后在清单文件加上网络权限
下面是一些实现功能的效果如图:
(1)首先要是服务端生成XMl先写一个jsp页面
<a href="personActionaddperson.action">查询</a>
写一个实体类Person类
package com.lin.entity; public class Person { private int pid; private String pname; private int page; public Person() { super(); } public Person(String pname, int page) { super(); this.pname = pname; this.page = page; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } @Override public String toString() { return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page + "]"; } }
然后文件的struts配置文件要配置好
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="myPackage" extends="struts-default"> <action name="personAction*" class="mypersonAction" method="{1}"> <result name="success">/login.jsp</result> </action> </package> </struts>
从数据库里面查数据展示生成xml
public String addperson() { List<Person> person=personBiz.getperson(); request.setAttribute("persons", person); return "success"; }
生成xml文件展示数据库的数据
<?xml version="1.0" encoding="UTF-8" ?><%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <persons><c:forEach items="${persons}" var="p"> <person name="${p.pid}"> <pname>${p.pname}</pname> <page>${p.page}</page> </person> </c:forEach> </persons>
生成的xml文件如图所示:
上面是使用SSH框架服务端生成XML接下来是使用Pull解析xml文件数据展示到android上效果如图所示:
(2)我这里是个简单的布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.android_parsexml.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" android:onClick="submit" /> <ListView caf0 android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv_main_listview" > </ListView> </LinearLayout>
接下来是MainActivity的文件
package com.example.android_parsexml; import android.app.ProgressDialog; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.util.Xml; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import org.xmlpull.v1.XmlPullParser; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { List<Person> PersonList=new ArrayList<>(); private ListView tv_main_listview; private ProgressDialog progressDialog; private Myadater myadater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化进度条对话框 progressDialog = new ProgressDialog(this); progressDialog.setMessage("拼命加载中......"); tv_main_listview = (ListView) findViewById(R.id.tv_main_listview); //实例化适配器 myadater = new Myadater(); tv_main_listview.setAdapter(myadater); } class Myadater extends BaseAdapter{ @Override public int getCount() { return PersonList.size(); } @Override public Object getItem(int i) { return PersonList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { LinearLayout layout=new LinearLayout(MainActivity.this); layout.setOrientation(LinearLayout.HORIZONTAL); TextView textViewpid=new TextView(MainActivity.this); textViewpid.setText(PersonList.get(i).getPid()+""); TextView textViewName=new TextView(MainActivity.this); textViewName.setText(PersonList.get(i).getPname()); TextView textViewsex=new TextView(MainActivity.this); textViewsex.setText(PersonList.get(i).getPage()+""); layout.addView(textViewpid); layout.addView(textViewName); layout.addView(textViewsex); return layout; } } public void submit(View view){ new MyTask().execute(); } class MyTask extends AsyncTask{ private Person person; @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected Object doInBackground(Object[] objects) { //获取网络数据XML //01.确定网络路径http://localhost:8080/mySSH/personActionadd.action String path="http://192.168.23.1:8080/mySSH/personActionaddperson.action"; try { //02.实例化URL URL url=new URL(path); //03获取连接对象 HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //04.设置请求方式 connection.setRequestMethod("GET"); //05.设置请求连接超时的时间(优化) connection.setConnectTimeout(5000); //06.获取响应码,结果码 int code=connection.getResponseCode(); if (code==200){ //07.获取服务器返回过来的数据 InputStream is=connection.getInputStream(); //缓冲字符流(测试) // BufferedReader br=new BufferedReader(new InputStreamReader(is)); // String str=null; // while((str=br.readLine())!=null){ // Log.i("test",str); // } //解析PULL XmlPullParser xpp= Xml.newPullParser(); xpp.setInput(is,"UTF-8"); int type=xpp.getEventType(); while(type!=XmlPullParser.END_DOCUMENT){ switch (type) { case XmlPullParser.START_TAG: //获取开始标签的名字 String startTagName=xpp.getName(); Log.i("test",""+"startTagName"+startTagName); if("person".equals(startTagName)){ person = new Person(); //获取name属性值 int pid=Integer.parseInt(xpp.getAttributeValue(0)); Log.i("test",""+pid); person.setPid(pid); }else if("pname".equals(startTagName)){ //获取sex的文本值 String pname=xpp.nextText(); Log.i("test",""+pname); person.setPname(pname); }else if("page".equals(startTagName)){ //获取sex的文本值 int page=Integer.parseInt(xpp.nextText()); Log.i("test",""+page); person.setPage(page); } break; case XmlPullParser.END_TAG: //获取到结束标签的名字 String endTagName=xpp.getName(); Log.i("test",""+endTagName); if("person".equals(endTagName)){ PersonList.add(person); } break; } type=xpp.next(); } } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); //通知适配器发生改变 myadater.notifyDataSetChanged(); progressDialog.cancel(); } } }
最后在清单文件加上网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
相关文章推荐
- Android使用PULL解析和生成XML文件
- Android开发之使用PULL解析和生成XML
- android学习——使用SAX、DOM 和 PULL 解析xml文件,及使用pull生成xml文件
- Android进阶——使用Pull解析和生成轻量级数据XML
- Android开发之使用PULL解析和生成XML
- android sax dom pull 解析xml 和生成xml
- android中pull解析xml和生成xml
- 【Android网络开发の3】XML之PULL方式 解析和生成XML文件
- Android下Xml解析技术(四)、pull生成Xml文件
- 文件androidAndroid使用PULL解析和生成XML文件
- bak 6.android xml解析 XmlPullParser的使用.
- android xml解析 XmlPullParser的使用
- Android中使用PULL方式解析XML和XmlSerializer进行序列化
- bak 6.android xml解析 XmlPullParser的使用.
- android_xml解析之 使用PULL读取XML文件 .
- android中使用SAX, DOM, 或者pull 来解析XML文档
- android使用pull方式解析xml
- Android解析XML方式(二)使用PULL解析XML
- Android 使用SAX或者DOM或者pull解析XML文件
- Android使用Pull生成XML