Android解析XML(PULL)展示到ListView

Android解析XML展示到ListView运行后的效果图如下:

服务端的请求页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <a href="studentActiongetXML.action" rel="external nofollow" >获取XML数据</a><br/>

</body>
</html>

服务端返回结果的页面

<?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" %>
<students>
<c:forEach items="${students}" var="s">
 <student name="${s.name}">
  <sex>${s.sex}</sex>
 </student>
 </c:forEach>
</students>

服务端的Java代码

package com.zking.action;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.zking.entity.Student;

public class StudentAction extends ActionSupport{

public String getXML() throws Exception {

 //查询数据库,获取数据
 List<Student> students=new ArrayList<>();
 for (int i = 1; i <=20; i++) {
  Student student=new Student("小霜"+i, "女");
  students.add(student);
 }

 //将对象集合保存到请求域中
 ServletActionContext.getRequest().setAttribute("students", students);
 return "dataResult";
 }
}

服务端的配置文件(struts.xml)

<?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="studentAction*" class="com.zking.action.StudentAction" method="{1}">
   <result name="dataResult">/dataResult.jsp</result>

  </action>
 </package>
 </struts>

服务端的运行结果

Android (布局文件 activity_main.xml)

<?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.g150825_android29_parsexml.MainActivity">

 <Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="获取XML"
 android:onClick="getXML"
 />
 <ListView
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/lv_main_list"
 ></ListView>
</LinearLayout>

Android(Java代码 MainActivity)

package com.example.g150825_android29_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<Student> studentList=new ArrayList<>();
 private ListView lv_main_list;
 private MyAdater myAdater;
 private ProgressDialog progressDialog;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 //实例化进度条对话框
 progressDialog = new ProgressDialog(this);
 progressDialog.setMessage("正在拼命加载中.....");

 lv_main_list = (ListView) findViewById(R.id.lv_main_list);

 //实例化适配器
 //设置适配器
 myAdater = new MyAdater();
 lv_main_list.setAdapter(myAdater);
 }

 class MyAdater extends BaseAdapter{

 @Override
 public int getCount() {
  return studentList.size();
 }

 @Override
 public Object getItem(int i) {
  return studentList.get(i);
 }

 @Override
 public long getItemId(int i) {
  return i;
 }

 @Override
 public View getView(int i, View view, ViewGroup viewGroup) {
  LinearLayout linearLayout=new LinearLayout(MainActivity.this);
  linearLayout.setOrientation(LinearLayout.HORIZONTAL);

  TextView textViewName=new TextView(MainActivity.this);
  textViewName.setText(studentList.get(i).getName());

  TextView textViewSex=new TextView(MainActivity.this);
  textViewSex.setText(studentList.get(i).getSex());

  linearLayout.addView(textViewName);
  linearLayout.addView(textViewSex);

  return linearLayout;
 }
 }

 public void getXML(View view){
 new MyTask().execute();
 }
 class MyTask extends AsyncTask{
 private Student student;

 @Override
 protected void onPreExecute() {
  super.onPreExecute();
  progressDialog.show();
 }

 @Override
 protected Object doInBackground(Object[] objects) {
  //01.确定网络数据
  String path="http://192.168.43.152:8080/G150825_S2SH/studentActiongetXML.action";

  try {
  //02.实例化URL
  URL url=new URL(path);
  //03.获取连接对象
  HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
  //04.设置请求方式
  httpURLConnection.setRequestMethod("GET");
  //05.设置请求连接超时的时间(优化)
  httpURLConnection.setConnectTimeout(5000);
  //06.获取响应码(结果码)
  int code=httpURLConnection.getResponseCode();
  if (code==200){
   //07.获取服务器返回过来的数据
   InputStream is=httpURLConnection.getInputStream();
   //测试(打印)
   //缓冲字符流
//   BufferedReader br=new BufferedReader(new InputStreamReader(is));
//   String str=null;
//   while ((str=br.readLine())!=null){
//   Log.i("test",str);
//   }
   //解析XML(PULL)
   XmlPullParser xmlPullParser=Xml.newPullParser();
   xmlPullParser.setInput(is,"UTF-8");
   int type=xmlPullParser.getEventType();
   while (type!=XmlPullParser.END_DOCUMENT){
   switch (type){

    case XmlPullParser.START_TAG:
    //获取开始标签
    String startTagName=xmlPullParser.getName();
    if ("student".equals(startTagName)){
     student = new Student();
     //获取name属性值
     String name=xmlPullParser.getAttributeValue(0);
     student.setName(name);
    }else if("sex".equals(startTagName)){
     //获取sex的文本值
     String sex=xmlPullParser.nextText();
     student.setSex(sex);

    }

    break;
    case XmlPullParser.END_TAG:
    //获取到结束标签的名字
    String endTagName=xmlPullParser.getName();
    if("student".equals(endTagName)){
     studentList.add(student);

    }

    break;
   }
   type=xmlPullParser.next();
   }
  }
  } catch (Exception e) {
  e.printStackTrace();
  }

  return null;
 }

 @Override
 protected void onPostExecute(Object o) {
  super.onPostExecute(o);
  //通知适配器发生改变
  myAdater.notifyDataSetChanged();
  progressDialog.cancel();

 }
 }
}

Android (实体类 Student)

package com.example.g150825_android29_parsexml;

public class Student {
 private String name;
 private String sex;
 public Student() {
 super();
 // TODO Auto-generated constructor stub
 }
 public Student(String name, String sex) {
 super();
 this.name = name;
 this.sex = sex;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getSex() {
 return sex;
 }
 public void setSex(String sex) {
 this.sex = sex;
 }
}

在清单文件中添加权限即可(AndroidManifest.xml)

 <!--添加网络权限-->
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android平台基于Pull方式对XML文件解析与写入方法详解

    本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

  • Android编程使用pull方式解析xml格式文件的方法详解

    本文实例讲述了Android编程使用pull方式解析xml格式文件的方法.分享给大家供大家参考,具体如下: 上次已经说过使用Android sax解析xml,实际上还可以使用pull解析xml.这样的方式效率也是比较高的.pull不仅可以在Android上使用也可以用在javaee里面,需要的就是pull的jar包.这次的xml也使用上次的那个,如下所示 <?xml version="1.0" encoding="UTF-8"?> <persons

  • Android编程解析XML文件的方法详解【基于XmlPullParser】

    本文实例讲述了Android编程解析XML文件的方法.分享给大家供大家参考,具体如下: 前言 在学习Android的Framework层源码时,Android大量的使用XmlPullParser来解析xml文件的源码.因此,这里也顺道介绍一下XmlPullParser的使用. XML XML(eXtensible Markup Language)中文名为可扩展标记语言.标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等. 用途 XML设计用了传送及携带数据信息,

  • Android pull解析xml的实现方法

    Android pull解析xml的实现方法 资源文件: persons.xml <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <persons> <person id="101"> <name>jame</name> <age>18</age> </person>

  • 实例解析Android中使用Pull解析器解析XML的方法

    1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相应的事件,然后进行相应的处理,当元素开始解析时,调用perser.nextText()方法就可以获取到下一个Text类型元素的值. 2.pull特点 (1)简单的结构,一个接口,一个另外,一个工厂组成了Pull解析器 (2)简单易用,Pull解析器只有一个重要的方法next(),他被用来检索下一个事

  • Android XmlPullParser 方式解析 Xml 文档

    Android XmlPullParser 方式解析 Xml 文档 xml 文件格式 <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>张三</name> <age>22</age> </person> <person id="2"&g

  • android4.0混淆XmlPullParser报错原因分析解决

    复制代码 代码如下: [2013-05-20 17:30:52 - danielinbiti] Proguard returned with error code 1. See console [2013-05-20 17:30:52 - danielinbiti] Note: there were 67 duplicate class definitions. [2013-05-20 17:30:52 - danielinbiti] Warning: library class android

  • 详解Android之解析XML文件三种方式(DOM,PULL,SAX)

    1.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

  • Android解析XML(PULL)展示到ListView

    Android解析XML展示到ListView运行后的效果图如下: 服务端的请求页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://

  • Android解析XML的三种方式SAX、Pull、Dom

    在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id=&quo

  • Android解析XML文件升级APK的方法

    安装APK public class DownLoadApk { public static SharedPreferences sharedPrederences = null; //启动安装界面 public static void DownId(Context context, long downId){ DownloadManager mDownloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOA

  • Android 解析XML 文件的四种方法总结

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以

  • Android 创建与解析XML(四)——详解Pull方式

     1.Pull概述 Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像XmlPullParser那样提取XML事件,而是把它们推出到数据流OutputStream或Writer中. XmlSerializer提供了很直观的API,即使用startDocument开始文档,endDocument结束文档,st

  • Android中使用pull解析器操作xml文件的解决办法

    一.使用Pull解析器读取XML文件 除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件. Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE.如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件.android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的. Pull解析器的运行方式与SAX 解析器相似.

  • Android基于Pull方式解析xml的方法详解

    本文实例讲述了Android基于Pull方式解析xml的方法.分享给大家供大家参考,具体如下: Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull. Pull解析和Sax解析不一样的地方有: (1)pull读取xml文件后触发相应的事件调用方法返回的是数字 (2)pull可以在程序中控制想解析到哪里就可以停止解析. 来看看实例: book.xml如下: <?xml version="1.0"

随机推荐