Android数据转化为Xml形式给客户端及客户端使用xml数据

(1)创建实体类News

public class News {
    private Integer id;
    private String title;
    private Integer timelength;

    public News(Integer id, String title, Integer timelength) {
        this.id = id;
        this.title = title;
        this.timelength = timelength;
    }
    //get、set方法
}

(2)面向接口编程所创建的接口可接口的实现类:

public interface VideoNewsService {
    /**
     * 获取最新的视频资讯
     * @return
     */
    public List<News> getLastNews();

}

接口的实现类,用于加入一些假数据

public class VideoNewsServiceBean implements VideoNewsService {

    public List<News> getLastNews(){
        List<News> newes = new ArrayList<News>();
        newes.add(new News(90, "喜羊羊与灰太狼全集", 78));
        newes.add(new News(10, "实拍舰载直升东海救援演习", 28));
        newes.add(new News(56, "喀麦隆VS荷兰", 70));
        return newes;
    }
}

(3)通过servlet返回数据大客户端

public class ListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private VideoNewsService service = new VideoNewsServiceBean();

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        List<News> videos = service.getLastNews();
        request.setAttribute("videos", videos);
        //重定向一个jsp界面,当客户端请求的时候返回的是该jsp页面数据
        request.getRequestDispatcher("/WEB-INF/page/videonews.jsp").forward(request, response);
    }
}

(4)生成xml文件的jsp页面(这里返回的为xml文件所以contentType=”text/xml”)

<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<?xml version="1.0" encoding="UTF-8"?>
<videonews>
<c:forEach items="${videos}" var="video">
    <news id="${video.id}">
        <title>${video.title}</title>
        <timelength>${video.timelength}</timelength>
    </news>
    </c:forEach>
</videonews>

(5)在客户端中使用xml文件

同样的客户端同样需要一个News实体类,这里省略

创建一个service类用于解析xml和返回xml文件数据

public class VideoNewsService {
    /**
     * 获取最新的视频资讯
     */
    public static List<News> getLastNews() throws Exception{
        String path = "请求servlet的url";
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if(conn.getResponseCode() == 200){
            InputStream inStream = conn.getInputStream();
            return parseXML(inStream);
        }
        return null;
    }
    /**
     * 解析服务器返回的xml数据
<?xml version="1.0" encoding="UTF-8" ?>
<videonews>
  <news id="35">
  <title>喜羊羊与灰太狼全集</title>
  <timelength>90</timelength>
  </news>
 <news id="12">
  <title>老张与灰太狼</title>
  <timelength>20</timelength>
  </news>
 <news id="56">
  <title>老方与LILI</title>
  <timelength>30</timelength>
  </news>
</videonews>
     */
    private static List<News> parseXML(InputStream inStream) throws Exception {
        List<News> newses = new ArrayList<News>();
        News news = null;
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(inStream, "UTF-8");
        int event = parser.getEventType();
        //对xml解析器的事件进行判断
        while( event != XmlPullParser.END_DOCUMENT){
            switch (event) {
            case XmlPullParser.START_TAG:
                if("news".equals(parser.getName())){
                    int id = new Integer(parser.getAttributeValue(0));
                    news = new News();
                    news.setId(id);
                }else if("title".equals(parser.getName())){
                    news.setTitle(parser.nextText());
                }else if("timelength".equals(parser.getName())){
                    news.setTimelength(new Integer(parser.nextText()));
                }
                break;

            case XmlPullParser.END_TAG:
                if("news".equals(parser.getName())){
                    newses.add(news);
                    news = null;
                }
                break;
            }
            event = parser.next();
        }
        return newses;
    }
}

(6)在Mainactivity.java文件中使用(这里是为一个listview设置值)

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView listView = (ListView) this.findViewById(R.id.listView);
        try {
            List<News> videos = VideoNewsService.getLastNews();//需修改成你本机的Http请求路径
            List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
            for(News news : videos){
                HashMap<String, Object> item = new HashMap<String, Object>();
                item.put("id", news.getId());
                item.put("title", news.getTitle());
                item.put("timelength", getResources().getString(R.string.timelength)
                        + news.getTimelength()+ getResources().getString(R.string.min));
                data.add(item);
            }
            SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
                    new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength});
            listView.setAdapter(adapter);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

到此完成操作

时间: 2024-10-20 21:27:01

Android数据转化为Xml形式给客户端及客户端使用xml数据的相关文章

Android数据转化为Json形式给客户端及客户端使用json数据

(1)首先创建生成原始数据的service,VideoNewsServiceBean,这是一个接口的实现类,接口的功能如下: public interface VideoNewsService { /** * 获取最新的视频资讯 * @return */ public List<News> getLastNews(); } News类 public class News { private Integer id; private String title; private Integer ti

Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了 String name = new String(response.getBytes("iso-8859-1"), "UTF-8"); 也无济于事.想到服务器好像是用URLENCODER编了码的,怀着试一试的态度

xml形式数据解析

 import java.io.IOException; import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.xml.sax.Input

java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.List; import nu.xom.Document; import nu.

Android逆向之旅---Android中如何获取在非Root设备中获取应用隐私数据

一.前言 今天在开发的过程中遇到一个问题,就是关于AndroidManifest.xml中的allowBackup属性,也算是自己之前对这个属性的不了解,加上IDE的自动生成代码,没太注意这个属性,但是没想到这个属性会直接导致隐私数据的丢失.下面就来看一下这个属性的影响到底有多大.他的作用是什么? 二.Android中的allowBackup属性 1.allowBackup安全风险描述Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开

Android Demo之旅 ListView底部添加加载更多按钮实现数据分页

在我们的实际项目中,数据应该说是很多的,我们的ListView不可能一下子把数据全部加载进来,我们可以当滚动条滚动到ListView的底部的时候,给一个更多的提示,当我们点击它即加载下一页的数据,相当与我们的分页效果,参考网上的东西,写了一个小小的demo,并总结了一些知识点,功能图如下:    源代码下载地址:http://download.csdn.net/detail/harderxin/7762625 掌握知识点: 1)自定义Adapter,将数据和ListView绑定起来 2)理解La

Android从服务端获取json解析显示在客户端上面

Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高; 因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet): 构造的Json数据如下: [{"name":"张三",&

捕捉soap的xml形式

下面是我以前对Php的soap接口进行抓包分析出的结果,这个分析在当服务端或者客户端的Php没有安装soap模块时,可以使用构建xml的方式实现相同的功能 服务端: $data = $HTTP_RAW_POST_DATA; $data = file_get_contents('php://input'); $server = new SoapServer(null, array('uri' => "http://abc-soap-duba/")); $server->add

Android实战简易教程-第二十五枪(基于Baas的数据表查询下拉刷新和上拉加载实现!)

上一节我们实现了数据表的加载,但是,当数据表数据很多时,我们就要考虑数据的分页,这里我们选用了PullToRefreshListView控件,先看一下该控件的说明: 效果图:                                 正在刷新                                                                       刷新后        一.导入Library 下载源码后(https://github.com/chrisba