采用json格式返回数据给Android客服端

来源:互联网 发布:北京环鼎铭阳网络 编辑:程序博客网 时间:2024/06/05 15:25

一.web开发相

1.实体Bean

package ygc.yxb.domain;public class News {    private Integer id;              //id    private String title;        //电影名称    private Integer timelenght; //时长    public News() {           }      public News(Integer id, String title, Integer timelenght) {        this.id = id;        this.title = title;        this.timelenght = timelenght;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public Integer getTimelenght() {        return timelenght;    }    public void setTimelenght(Integer timelenght) {        this.timelenght = timelenght;    }}

2.业务逻辑

package ygc.yxb.service.impl;public class VideoNewsServiceImpl implements VideoNewsService {       public List<News> getLastNews(){             List<News> newses = new ArrayList<News>();        newses.add(new News(32, "大话西游", 90));        newses.add(new News(12, "轩辕剑", 40));        newses.add(new News(56, "爱情公寓", 30));        return newses;           }}

3.Servlet

package ygc.yxb.servlet;
public class ListServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    private VideoNewsService service = new VideoNewsServiceImpl();       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();        String format=request.getParameter("format");        //如果用户请求的是这个路径,则返回JSON格式的数据.http://192.168.1.113:8080/videonews/ListServlet?format=json                if("json".equals(format)){            //[{id:56,title:"xxxx",timelength:90}]            //组拼一个JSON格式的对象            StringBuilder builder = new StringBuilder();            builder.append('[');                for (News news : videos) {                    builder.append('{');                        builder.append("id:").append(news.getId()).append(',');                        builder.append("title:\"").append(news.getTitle()).append("\",");                        builder.append("timelength:").append(news.getTimelenght());                    builder.append("},");                }                builder.deleteCharAt(builder.length()-1);            builder.append(']');                        request.setAttribute("json", builder.toString());            request.getRequestDispatcher("/WEB-INF/page/jsonvideonews.jsp").forward(request, response);                                //如果用户请求的是这个路径,则返回XML格式的数据.http://192.168.1.113:8080/videonews/ListServlet        }else{            request.setAttribute("videos", videos);            request.getRequestDispatcher("/WEB-INF/page/videonews.jsp").forward(request, response);        }    }}

4.jsp页面

4.1.jsonvideonews.jsp

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}

4.2.videonews.jsp 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.timelenght}</timelength>        </news>    </c:forEach></videonews>

现在Android开发相关代码

1.实体Bean

package ygc.yxb.domain;
public class News {    private Integer id;    private String title;    private Integer timelenght;            public News() {            }            public News(Integer id, String title, Integer timelenght) {        this.id = id;        this.title = title;        this.timelenght = timelenght;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public Integer getTimelenght() {        return timelenght;    }    public void setTimelenght(Integer timelenght) {        this.timelenght = timelenght;    }}

2.业务逻辑

package ygc.yxb.service;public class VideoNewsService {            public static List<News> getLastNews() throws Exception{        String path="http://192.168.1.113:8080/videonews/ListServlet";        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;    }            public static List<News> getJSONLastNews() throws Exception{        String path="http://192.168.1.113:8080/videonews/ListServlet?format=json";        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 parseJSON(inStream);        }        return null;    }        private static List<News> parseJSON(InputStream inStream) throws Exception {        List<News> newses = new ArrayList<News>();        byte[] data =StreamTool.read(inStream);        //将字节数组转换成字符串        String json= new String(data);        //将json对象转换成json的数组对象        JSONArray array = new JSONArray(json);        for (int i = 0; i < array.length(); i++) {            JSONObject jsonObject=array.getJSONObject(i);            News news=new News(jsonObject.getInt("id"),jsonObject.getString("title"),jsonObject.getInt("timelength"));            newses.add(news);        }                return newses;    }        private static List<News> parseXML(InputStream inStream) throws Exception{        List<News> newses = new ArrayList<News>();        News news = null;        //用Pull解析器解析XML文件        XmlPullParser parser= Xml.newPullParser();        parser.setInput(inStream, "UTF-8");                //得到开始文档XML事件        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.setTimelenght(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;    }}

3.Activity

package ygc.yxb.news;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.getJSONLastNews();            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.getTimelenght()+getResources().getString(R.string.min));                data.add(item);                            }            //用SimpleAdapter 绑定ListView控件            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();        }    }}

4读取数据流工具类:

package ygc.yxb.utils;public class StreamTool {    public static byte[] read(InputStream inStream) throws Exception {        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = 0;        //如果字节流中的数据不等于-1,就说明一直有,然后循环读出        while( (len=inStream.read(buffer)) !=-1){            //将读出的数据放入内存中            outputStream.write(buffer);                    }        inStream.close();        return outputStream.toByteArray();    }}

0 0
原创粉丝点击