例子说明:用户通过访问web资源的最新电影资讯,服务器端生成XML或JSON格式数据,返回Android客户端进行显示。 此案例开发需要两个方面 WEB开发和Android开发. 一.web开发相对比较简单,只是模拟一下 相关代码如下: 1.实体Bean

  1. package ygc.yxb.domain;[/font]
  2. /**
  3. * 电影资讯实体Bean
  4. * @author YXB
  5. *
  6. */
  7. public class News {
  8. private Integer id;              //id
  9. private String title;        //电影名称
  10. private Integer timelenght; //时长
  11. public News() {
  12. }
  13. public News(Integer id, String title, Integer timelenght) {
  14. this.id = id;
  15. this.title = title;
  16. this.timelenght = timelenght;
  17. }
  18. public Integer getId() {
  19. return id;
  20. }
  21. public void setId(Integer id) {
  22. this.id = id;
  23. }
  24. public String getTitle() {
  25. return title;
  26. }
  27. public void setTitle(String title) {
  28. this.title = title;
  29. }
  30. public Integer getTimelenght() {
  31. return timelenght;
  32. }
  33. public void setTimelenght(Integer timelenght) {
  34. this.timelenght = timelenght;
  35. }

2.业务逻辑

  1. package ygc.yxb.service.impl;[/font]
  2. import java.util.ArrayList;
  3. import java.util.List;[/font]
  4. import ygc.yxb.domain.News;
  5. import ygc.yxb.service.VideoNewsService;[/font]
  6. public class VideoNewsServiceImpl implements VideoNewsService {
  7. /**
  8. * 获取电影资讯的业务方法
  9. */
  10. public List<News> getLastNews(){
  11. List<News> newses = new ArrayList<News>();
  12. newses.add(new News(32, "大话西游", 90));
  13. newses.add(new News(12, "轩辕剑", 40));
  14. newses.add(new News(56, "爱情公寓", 30));
  15. return newses;
  16. }

3.Servlet

  1. package ygc.yxb.servlet;[/font]
  2. import java.io.IOException;
  3. import java.util.List;[/font]
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;[/font]
  8. import ygc.yxb.domain.News;
  9. import ygc.yxb.service.VideoNewsService;
  10. import ygc.yxb.service.impl.VideoNewsServiceImpl;[/font]
  11. /**
  12. * 用最原始的web开发servlet请求服务器,并返回客户端数据
  13. */
  14. public class ListServlet extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16. private VideoNewsService service = new VideoNewsServiceImpl();
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. doPost(request, response);
  19. }
  20. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  21. List<News> videos = service.getLastNews();
  22. String format=request.getParameter("format");
  23. //如果用户请求的是这个路径,则返回JSON格式的数据.http://192.168.1.113:8080/videonews/ListServlet?format=json
  24. if("json".equals(format)){
  25. //[{id:56,title:"xxxx",timelength:90}]
  26. //组拼一个JSON格式的对象
  27. StringBuilder builder = new StringBuilder();
  28. builder.append('[');
  29. for (News news : videos) {
  30. builder.append('{');
  31. builder.append("id:").append(news.getId()).append(',');
  32. builder.append("title:\"").append(news.getTitle()).append("\",");
  33. builder.append("timelength:").append(news.getTimelenght());
  34. builder.append("},");
  35. }
  36. builder.deleteCharAt(builder.length()-1);
  37. builder.append(']');
  38. request.setAttribute("json", builder.toString());
  39. request.getRequestDispatcher("/WEB-INF/page/jsonvideonews.jsp").forward(request, response);
  40. //如果用户请求的是这个路径,则返回XML格式的数据.http://192.168.1.113:8080/videonews/ListServlet
  41. }else{
  42. request.setAttribute("videos", videos);
  43. request.getRequestDispatcher("/WEB-INF/page/videonews.jsp").forward(request, response);
  44. }
  45. }

4.jsp页面
4.1.jsonvideonews.jsp

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

4.2.videonews.jsp XML数据

  1. <%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><[url=mailto:%@taglib]%@taglib[/url] uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><?xml version="1.0" encoding="UTF-8"?>
  2. <videonews>
  3. <c:forEach items="${videos}" var="video">
  4. <news id ="${video.id }">
  5. <title>${video.title }</title>
  6. <timelength>${video.timelenght}</timelength>
  7. </news>
  8. </c:forEach>
  9. </videonews>

到此为止web开发完毕,现在Android开发相关代码 1.实体Bean

  1. package ygc.yxb.domain;
  2. public class News {
  3. private Integer id;
  4. private String title;
  5. private Integer timelenght;
  6. public News() {
  7. }
  8. public News(Integer id, String title, Integer timelenght) {
  9. this.id = id;
  10. this.title = title;
  11. this.timelenght = timelenght;
  12. }
  13. public Integer getId() {
  14. return id;
  15. }
  16. public void setId(Integer id) {
  17. this.id = id;
  18. }
  19. public String getTitle() {
  20. return title;
  21. }
  22. public void setTitle(String title) {
  23. this.title = title;
  24. }
  25. public Integer getTimelenght() {
  26. return timelenght;
  27. }
  28. public void setTimelenght(Integer timelenght) {
  29. this.timelenght = timelenght;
  30. }
  31. }

2.业务逻辑

  1. package ygc.yxb.service;
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.json.JSONArray;
  8. import org.json.JSONObject;
  9. import org.xmlpull.v1.XmlPullParser;
  10. import android.util.Xml;
  11. import ygc.yxb.domain.News;
  12. import ygc.yxb.utils.StreamTool;
  13. public class VideoNewsService {
  14. /**
  15. * 获取最新的视频资讯接受服务器端XML格式的数据
  16. * @return
  17. * @throws Exception
  18. */
  19. public static List<News> getLastNews() throws Exception{
  20. String path="http://192.168.1.113:8080/videonews/ListServlet";
  21. URL url = new URL(path);
  22. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  23. conn.setConnectTimeout(5000);
  24. conn.setRequestMethod("GET");
  25. if(conn.getResponseCode()==200){
  26. InputStream inStream=conn.getInputStream();
  27. return parseXML(inStream);
  28. }
  29. return null;
  30. }
  31. /**
  32. * 获取最新的视频资讯 接受服务器端JSON格式的数据
  33. * @return
  34. * @throws Exception
  35. */
  36. public static List<News> getJSONLastNews() throws Exception{
  37. String path="http://192.168.1.113:8080/videonews/ListServlet?format=json";
  38. URL url = new URL(path);
  39. HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  40. conn.setConnectTimeout(5000);
  41. conn.setRequestMethod("GET");
  42. if(conn.getResponseCode()==200){
  43. InputStream inStream=conn.getInputStream();
  44. return parseJSON(inStream);
  45. }
  46. return null;
  47. }
  48. /**
  49. * 解析JSON数据
  50. * @param inStream
  51. * @return
  52. */
  53. private static List<News> parseJSON(InputStream inStream) throws Exception {
  54. List<News> newses = new ArrayList<News>();
  55. byte[] data =StreamTool.read(inStream);
  56. //将字节数组转换成字符串
  57. String json= new String(data);
  58. //将json对象转换成json的数组对象
  59. JSONArray array = new JSONArray(json);
  60. for (int i = 0; i < array.length(); i++) {
  61. JSONObject jsonObject=array.getJSONObject(i);
  62. News news=new News(jsonObject.getInt("id"),jsonObject.getString("title"),jsonObject.getInt("timelength"));
  63. newses.add(news);
  64. }
  65. return newses;
  66. }
  67. /**
  68. * 解析服务器返回的XML数据
  69. * @param inStream
  70. * @return
  71. */
  72. private static List<News> parseXML(InputStream inStream) throws Exception{
  73. List<News> newses = new ArrayList<News>();
  74. News news = null;
  75. //用Pull解析器解析XML文件
  76. XmlPullParser parser= Xml.newPullParser();
  77. parser.setInput(inStream, "UTF-8");
  78. //得到开始文档XML事件
  79. int event = parser.getEventType();
  80. //不等于结束事件,循环读取XML文件并封装成对象
  81. while(event !=XmlPullParser.END_DOCUMENT){
  82. switch (event) {
  83. case XmlPullParser.START_TAG:
  84. if("news".equals(parser.getName())){
  85. int id = new Integer(parser.getAttributeValue(0));
  86. news = new News();
  87. news.setId(id);
  88. }else if("title".equals(parser.getName())){
  89. news.setTitle(parser.nextText());
  90. }else if("timelength".equals(parser.getName())){
  91. news.setTimelenght(new Integer(parser.nextText()));
  92. }
  93. break;
  94. case XmlPullParser.END_TAG:
  95. if("news".equals(parser.getName())){
  96. newses.add(news);
  97. news = null;
  98. }
  99. break;
  100. }
  101. event = parser.next();
  102. }
  103. return newses;
  104. }
  105. }

3.Activity

  1. package ygc.yxb.news;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import ygc.yxb.domain.News;
  6. import ygc.yxb.service.VideoNewsService;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.widget.ListView;
  10. import android.widget.SimpleAdapter;
  11. public class MainActivity extends Activity {
  12. /** Called when the activity is first created. */
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. ListView listView=(ListView)this.findViewById(R.id.listView);
  18. try {
  19. List<News> videos=VideoNewsService.getJSONLastNews();
  20. List<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
  21. for (News news : videos) {
  22. HashMap<String, Object> item = new HashMap<String, Object>();
  23. item.put("id", news.getId());
  24. item.put("title", news.getTitle());
  25. item.put("timelength", getResources().getString(R.string.timelength)+
  26. news.getTimelenght()+getResources().getString(R.string.min));
  27. data.add(item);
  28. }
  29. //用SimpleAdapter 绑定ListView控件
  30. SimpleAdapter adapter = new SimpleAdapter(this,data,
  31. R.layout.item,new String[]{"title","timelength"},
  32. new int[]{R.id.title,R.id.timelength});
  33. listView.setAdapter(adapter);
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

4读取数据流工具类:

  1. package ygc.yxb.utils;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.InputStream;
  4. public class StreamTool {
  5. /**
  6. * 读取流中的数据
  7. * @param inStream
  8. * @return
  9. * @throws Exception
  10. */
  11. public static byte[] read(InputStream inStream) throws Exception {
  12. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  13. byte[] buffer = new byte[1024];
  14. int len = 0;
  15. //如果字节流中的数据不等于-1,就说明一直有,然后循环读出
  16. while( (len=inStream.read(buffer)) !=-1){
  17. //将读出的数据放入内存中
  18. outputStream.write(buffer);
  19. }
  20. inStream.close();
  21. return outputStream.toByteArray();
  22. }
  23. }

这里Android 开发完毕,而显示的控件是ListView 最后在清单文件中,配置访问网络的权限即可。

Android 进行解析并显示服务端返回的数据的更多相关文章

  1. fastjson解析服务端返回的数据

    1.配置依赖 //fastjson api 'com.alibaba:fastjson:1.2.44' 2.设计服务端返回的数据 {},{},{}]} 3.编写bean类,特别注意,要和服务端返回的类 ...

  2. js插件---WebUploader 如何接收服务端返回的数据

    js插件---WebUploader 如何接收服务端返回的数据 一.总结 一句话总结: uploadSuccess有两个参数,一个是file(上传的文件信息),一个是response(服务器返回的信息 ...

  3. 05_android入门_GET方式实现登陆(在控件上显示服务端返回的内容)

    当点击登陆之后,怎么把server端返回的数据,写到指定的控件上尼?,在android怎么实现尼?以下我们通过详细的代码进行分析和实现,希望能对你,在学习android知识上有所帮助. 以下通过代码说 ...

  4. android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

    补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...

  5. 服务端返回可执行js格式要求

    服务端返回的数据,如果有直接执行的代码,那返回的头部格式中的"Content-Type",不能为"text/plain",不然,浏览器是不会执行返回数据的. 返 ...

  6. 在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

    最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web se ...

  7. axis2生成webservice服务端返回String[]和String[][]一维数组和二维数组解析

    环境:用axis2生成服务端,用aixs做客户端 1:直接返回String[]: public String[] testArr(String name) { String[] ret=new Str ...

  8. ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法

    ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...

  9. Android ListView分页载入(服务端+android端)Demo

    Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEcli ...

随机推荐

  1. (2.6)Mysql之SQL基础——存储引擎的查看与修改

    (2.6)Mysql之SQL基础——存储引擎的查看与修改 可以使用 show engines; 查看数据库支持的所有的存储引擎: 目录: 1.数据库级别存储引擎 1.1查看现在默认的存储引擎 1.2 ...

  2. npm命令,查看当前npm版本,更新nmp到最新版本,安装sails

    打开Node.js command prompt 1 查看npm当前版本 npm -v 2 更新npm至最新版本 npm install npm@latest -g 3 安装sails  npm in ...

  3. 关于safenetde 的明文 密文 数据 。这个数组使用 safenet的助手 产生的。

    关于safenetde 的明文 密文  数据  .这个数组使用 safenet的助手 产生的. 下图是生成的数组 例如: { 0x9B, 0xFD, 0xF5, 0xA6, 0xF5, 0x57, 0 ...

  4. 工作笔记——限定input上传文件对话框中能选取的文件的格式

    原文:http://www.dengzhr.com/frontend/1059 input[file]标签的accept属性可用于指定上传文件的 MIME类型 . 例如,想要实现默认上传图片文件的代码 ...

  5. SVN遇到的问题和解决方法(后期还会继续更新)

    1,smartsvn客户端(version客户端类似),一些.a文件无法识别,也就无法提交到svn! 解决办法如下: 在smartsvn客户端下面view->Ignored Files 勾选上就 ...

  6. 150. Evaluate Reverse Polish Notation(逆波兰表达式)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  7. [HZNUOJ] 使用Excel + Word 批量制作准考证

    一般程序设计考试或者ACM比赛都会使用临时账号登录,这时候就需要批量制作密码条 首先需要用Excel 存储队伍的信息 比如像这样分门别类的放好 然后在word 中制作好密码条样式 选择邮件->开 ...

  8. BZOJ 1316: 树上的询问

    挺裸的点分治 刚开始想用map水过去,然后做p次点分治,然后T到自闭 最后发现可以sort一遍,然后去重,记录每个数出现的次数,这样就可以双指针,不会漏掉了 #include <bits/std ...

  9. Unity本地数据存储---Sqlite和JSON

    2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件. 这导致我们修改之后的DB文件无法产生效果. 本人 ...

  10. web安全学习方向~两图胜千言~~