安卓 解析xml
来源:互联网 发布:最简单的游戏c编程 编辑:程序博客网 时间:2024/05/14 18:27
安卓获取服务器的数据分为两种形式,一种为xml,一种为json.这两种形式都需要通过解析才能获得数据,今天就分享一下xml的解析。博主写了一个小demo。从java服务器中获取数据并展示在移动端。由于一些问题,不能放效果图,不过主页面也就是一个Button,通过Button点击事件获取数据。接下来贴的是服务器的代码。实体类就不贴了,直接贴方法吧!因为是个简单的demo,数据就是模拟的。
java代码:
@RequestMapping("getdata.xhtml") public String getxml(HttpServletRequest req){ //获取数据 调用数据库查询数据,返回数据集合 //list为有序 set为无序 List<Friendring> fr=new ArrayList<Friendring>(); //遍历数据: for (int i = 0;i< 10; i++) { //得到时间 Calendar calendar=Calendar.getInstance(); int year=calendar.get(Calendar.YEAR); int month=calendar.get(Calendar.MONTH); int day=calendar.get(Calendar.DAY_OF_MONTH); fr.add(new Friendring("cat"+i,"very cut",year+"-"+month+"-"+day)); } // 将对象集合存放到请求域中 req.setAttribute("fr",fr); return "showdata"; }
其jsp页面:
<?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"%><fqs><c:forEach items="${fr}" var="fr"> <fq name="${fr.name}"> <content>${fr.content}</content> <time>${fr.time}</time> </fq> </c:forEach> </fqs>
接下来就是移动端接受数据了,但他们之间要想实现连接呢!先需要搭个局域网。至于局域网怎么搭呢?就是你的服务端要与移动端连接同一个网,也就是同一个ip地址,可以好好百度一下,就不说这么多了。接下来贴的是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: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.an_parsexml.MainActivity"> <Button android:layout_width="match_parent" 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>
其对应的activity:
package com.example.an_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.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;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;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;public class MainActivity extends AppCompatActivity { private ProgressDialog progressDialog; private ListView lv_main_list; private List<Friendring> lists=new ArrayList<>(); private Myadapter myadapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main_list = (ListView) findViewById(R.id.lv_main_list); myadapter = new Myadapter(); lv_main_list.setAdapter(myadapter); Log.i("test","ccccc"); //加载进度 progressDialog = new ProgressDialog(this); progressDialog.setMessage("玩命加载中"); } class Myadapter extends BaseAdapter{ @Override public int getCount() { return lists.size(); } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView==null){ convertView= getLayoutInflater().from(MainActivity.this).inflate(R.layout.item_listview,null); Itemtag itemtag=new Itemtag(); itemtag.tv_name= (TextView) convertView.findViewById(R.id.tv_item_listview_name); itemtag.tv_content= (TextView) convertView.findViewById(R.id.tv_item_listview_content); itemtag.tv_time= (TextView) convertView.findViewById(R.id.tv_item_listview_time); // Log.i("test","bbbbbbbb"); convertView.setTag(itemtag); } Itemtag itemtag= (Itemtag) convertView.getTag(); itemtag.tv_name.setText(lists.get(position).getName()); itemtag.tv_content.setText(lists.get(position).getContent()); itemtag.tv_time.setText(lists.get(position).getTime()); // Log.i("test","aaaaaaaaa"); return convertView; } } public void getXML(View view){ new Mytask().execute(); } //拿数据(网络) class Mytask extends AsyncTask{ //获取前 @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected Object doInBackground(Object[] params) { List<Friendring> fd=new ArrayList<>(); //获取网络数据 //1,获取网络数据的路径 String path="http://192.168.253.10:8090/front/getdata.xhtml"; //2 实例化url try { URL url=new URL(path); //3 获取连接对象(也就是正式建立连接) HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //4,设置请求方式 connection.setRequestMethod("GET"); //5 设置请求超时的时间 connection.setConnectTimeout(5000); //6 判断是否能拿到数据 获取响应码 int code=connection.getResponseCode(); if(code==200){ // 7 获取返回过来的数据(xml) //返回数据 通过流的方式拿 InputStream is= connection.getInputStream(); //测试 是否拿到数据 //读取出来 用缓冲字符流 把字节转成字符 // String str=null;// BufferedReader br=new BufferedReader(new InputStreamReader(is));// while ((str=br.readLine())!=null){// Log.i("test",str);// } //解析 方式:dom sax pull //其一 DOM解析 一次性解析完 try { //通过工厂 DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); //得到流 Document document= documentBuilder.parse(is); //开始解析 获得跟标签 Element root=document.getDocumentElement(); // Log.i("test","获得跟标签"); //node Element区别:node 包含所有 比如空格 Element只包含标签 //获得节点名 子标签 NodeList nodeList= root.getElementsByTagName("fq"); //遍历 for (int i = 0; i <nodeList.getLength() ; i++) { //获取下面的子标签 Element elment= (Element) nodeList.item(i); //获取属性name String name=elment.getAttribute("name"); Log.i("test",name); //获取子标签 Element elmentcontent= (Element) elment.getElementsByTagName("content").item(0); //得到文本内容: String content= elmentcontent.getTextContent(); Element elementtime= (Element) elment.getElementsByTagName("time").item(0); //得到文本内容: String time= elementtime.getTextContent(); Log.i("test",name+content+""+time); //将其加到集合 Friendring friendring=new Friendring(name,content,time); fd.add(friendring); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } } catch (java.io.IOException e) { e.printStackTrace(); } return fd; } //更新页面 @Override protected void onPostExecute(Object o) { super.onPostExecute(o); List<Friendring> fd= (List<Friendring>) o; //把数据加入到适配器当中 lists.addAll(fd); //通知适配器发生改变 myadapter.notifyDataSetChanged(); progressDialog.cancel(); // Log.i("test","dddddd"); } }}
展示数据xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_name" /> <TextView android:text="TextView" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_content" /> <TextView android:text="TextView" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:id="@+id/tv_item_listview_time" /></LinearLayout>
实体类那些就不贴了,别忘了配置联网权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
0 0
- 安卓xml解析
- 解析 xml 安卓
- 安卓 解析xml
- 安卓xml解析
- 安卓sax解析xml
- 安卓xml pull 解析
- 安卓笔记 xml解析
- 安卓中的XML解析
- 安卓SAX解析XML文件
- 安卓快速解析xml工具类
- 安卓解析xml格式字符串
- 安卓设备PULL解析XML文件
- XML解析和安卓单元测试框架
- 6.安卓pull解析XML文件
- 安卓网络访问解析XML
- 安卓 三种方式解析xml
- 安卓style.xml与attrs.xml的深入解析
- 安卓使用pull解析器解析xml
- Linux内核分析课程--通过反汇编一个简单的c程序,分析汇编代码并理解计算机如何工作的
- Revit API 进阶之隐藏Element用户可见参数.
- C# Get方式请求Http
- POJ 3498 最大流
- 【转】Linux系统下为WPS添加字体,实现WPS输入中文
- 安卓 解析xml
- DataTable转JSON到前台
- Android保持设备唤醒状态
- 【书山有路】Python基础教程 第2章
- CPU,内存,硬盘,指令之间的关系
- 剖析虚函数
- ueditor:使用笔记:
- Mproxy项目实录第1天
- mysqlbinlog恢复增量备份数据