http://daimajishu.iteye.com/blog/1088626

转自:

Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回

json XML Android 网络协议 资讯

1.服务器端代码样例:

Java代码
  1. publicclassVideoListActionextendsAction
  2. {
  3. privateVideoServiceservice=newVideoServiceBean();
  4. publicActionForwardexecute(ActionMappingmapping,ActionFormform,
  5. HttpServletRequestrequest,HttpServletResponseresponse)
  6. throwsException
  7. {
  8. //得到最新的视频资讯
  9. List<Video>videos=service.getLastVideos();
  10. VideoFormformbean=(VideoForm)form;
  11. if("json".equals(formbean.getFormat()))
  12. {
  13. //构建json字符串
  14. StringBuilderjson=newStringBuilder();
  15. json.append('[');
  16. for(Videovideo:videos)
  17. {//需要构造的形式是{id:76,title:"xxxx",timelength:80}
  18. json.append('{');
  19. json.append("id:").append(video.getId()).append(',');
  20. json.append("title:\"").append(video.getTitle()).append("\",");
  21. json.append("timelength:").append(video.getTime());
  22. json.append('}').append(',');
  23. }
  24. json.deleteCharAt(json.length()-1);
  25. json.append(']');
  26. //把json字符串放置于request
  27. request.setAttribute("json",json.toString());
  28. returnmapping.findForward("jsonvideo");
  29. }
  30. else
  31. {
  32. request.setAttribute("videos",videos);
  33. returnmapping.findForward("video");
  34. }
  35. }
  36. }

Java代码
  1. publicclassVideoServiceBeanimplementsVideoService
  2. {
  3. publicList<Video>getLastVideos()throwsException
  4. {
  5. //理论上应该查询数据库
  6. List<Video>videos=newArrayList<Video>();
  7. videos.add(newVideo(78,"喜羊羊与灰太狼全集",90));
  8. videos.add(newVideo(78,"实拍舰载直升东海救援演习",20));
  9. videos.add(newVideo(78,"喀麦隆VS荷兰",30));
  10. returnvideos;
  11. }
  12. }

Java代码
  1. publicclassVideoListActionextendsAction
  2. {
  3. privateVideoServiceservice=newVideoServiceBean();
  4. publicActionForwardexecute(ActionMappingmapping,ActionFormform,
  5. HttpServletRequestrequest,HttpServletResponseresponse)
  6. throwsException
  7. {
  8. //得到最新的视频资讯
  9. List<Video>videos=service.getLastVideos();
  10. VideoFormformbean=(VideoForm)form;
  11. if("json".equals(formbean.getFormat()))
  12. {
  13. //构建json字符串
  14. StringBuilderjson=newStringBuilder();
  15. json.append('[');
  16. for(Videovideo:videos)
  17. {//需要构造的形式是{id:76,title:"xxxx",timelength:80}
  18. json.append('{');
  19. json.append("id:").append(video.getId()).append(',');
  20. json.append("title:\"").append(video.getTitle()).append("\",");
  21. json.append("timelength:").append(video.getTime());
  22. json.append('}').append(',');
  23. }
  24. json.deleteCharAt(json.length()-1);
  25. json.append(']');
  26. //把json字符串放置于request
  27. request.setAttribute("json",json.toString());
  28. returnmapping.findForward("jsonvideo");
  29. }
  30. else
  31. {
  32. request.setAttribute("videos",videos);
  33. returnmapping.findForward("video");
  34. }
  35. }
  36. }

2.客户端:使用XML方式与JSON方式返回数据

Java代码
  1. publicclassVideoService
  2. {
  3. /**
  4. *以XML方式返回获取最新的资讯
  5. *@return
  6. *@throwsException
  7. */
  8. publicstaticList<Video>getLastVideos()throwsException
  9. {
  10. //确定请求服务器的地址
  11. //注意在Android模拟器中访问本机服务器时不可以使用localhost与127字段
  12. //因为模拟器本身是使用localhost绑定
  13. Stringpath="http://192.168.1.100:8080/videoweb/video/list.do";
  14. //建立一个URL对象
  15. URLurl=newURL(path);
  16. //得到打开的链接对象
  17. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  18. //设置请求超时与请求方式
  19. conn.setReadTimeout(5*1000);
  20. conn.setRequestMethod("GET");
  21. //从链接中获取一个输入流对象
  22. InputStreaminStream=conn.getInputStream();
  23. //对输入流进行解析
  24. returnparseXML(inStream);
  25. }
  26. /**
  27. *解析服务器返回的协议,得到资讯
  28. *@paraminStream
  29. *@return
  30. *@throwsException
  31. */
  32. privatestaticList<Video>parseXML(InputStreaminStream)throwsException
  33. {
  34. List<Video>videos=null;
  35. Videovideo=null;
  36. //使用XmlPullParser
  37. XmlPullParserparser=Xml.newPullParser();
  38. parser.setInput(inStream,"UTF-8");
  39. inteventType=parser.getEventType();//产生第一个事件
  40. //只要不是文档结束事件
  41. while(eventType!=XmlPullParser.END_DOCUMENT)
  42. {
  43. switch(eventType)
  44. {
  45. caseXmlPullParser.START_DOCUMENT:
  46. videos=newArrayList<Video>();
  47. break;
  48. caseXmlPullParser.START_TAG:
  49. //获取解析器当前指向的元素的名称
  50. Stringname=parser.getName();
  51. if("video".equals(name))
  52. {
  53. video=newVideo();
  54. //把id属性写入
  55. video.setId(newInteger(parser.getAttributeValue(0)));
  56. }
  57. if(video!=null)
  58. {
  59. if("title".equals(name))
  60. {
  61. //获取解析器当前指向元素的下一个文本节点的值
  62. video.setTitle(parser.nextText());
  63. }
  64. if("timelength".equals(name))
  65. {
  66. //获取解析器当前指向元素的下一个文本节点的值
  67. video.setTime(newInteger(parser.nextText()));
  68. }
  69. }
  70. break;
  71. caseXmlPullParser.END_TAG:
  72. if("video".equals(parser.getName()))
  73. {
  74. videos.add(video);
  75. video=null;
  76. }
  77. break;
  78. }
  79. eventType=parser.next();
  80. }
  81. returnvideos;
  82. }
  83. /**
  84. *以Json方式返回获取最新的资讯,不需要手动解析,JSON自己会进行解析
  85. *@return
  86. *@throwsException
  87. */
  88. publicstaticList<Video>getJSONLastVideos()throwsException
  89. {
  90. //
  91. List<Video>videos=newArrayList<Video>();
  92. //
  93. Stringpath="http://192.168.1.100:8080/videoweb/video/list.do?format=json";
  94. //建立一个URL对象
  95. URLurl=newURL(path);
  96. //得到打开的链接对象
  97. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  98. //设置请求超时与请求方式
  99. conn.setReadTimeout(5*1000);
  100. conn.setRequestMethod("GET");
  101. //从链接中获取一个输入流对象
  102. InputStreaminStream=conn.getInputStream();
  103. //调用数据流处理方法
  104. byte[]data=StreamTool.readInputStream(inStream);
  105. Stringjson=newString(data);
  106. //构建JSON数组对象
  107. JSONArrayarray=newJSONArray(json);
  108. //从JSON数组对象读取数据
  109. for(inti=0;i<array.length();i++)
  110. {
  111. //获取各个属性的值
  112. JSONObjectitem=array.getJSONObject(i);
  113. intid=item.getInt("id");
  114. Stringtitle=item.getString("title");
  115. inttimelength=item.getInt("timelength");
  116. //构造的对象加入集合当中
  117. videos.add(newVideo(id,title,timelength));
  118. }
  119. returnvideos;
  120. }
  121. }

Java代码
  1. publicclassStreamTool
  2. {
  3. /**
  4. *从输入流中获取数据
  5. *@paraminStream输入流
  6. *@return
  7. *@throwsException
  8. */
  9. publicstaticbyte[]readInputStream(InputStreaminStream)throwsException{
  10. ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
  11. byte[]buffer=newbyte[1024];
  12. intlen=0;
  13. while((len=inStream.read(buffer))!=-1){
  14. outStream.write(buffer,0,len);
  15. }
  16. inStream.close();
  17. returnoutStream.toByteArray();
  18. }
  19. }

Java代码
  1. publicclassMainActivityextendsActivity
  2. {
  3. privateListViewlistView;
  4. @Override
  5. publicvoidonCreate(BundlesavedInstanceState)
  6. {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. //获取到ListView对象
  10. listView=(ListView)this.findViewById(R.id.listView);
  11. try
  12. {
  13. //通过
  14. List<Video>videos=VideoService.getLastVideos();
  15. //通过Json方式获取视频内容
  16. //List<Video>videos2=VideoService.getJSONLastVideos();
  17. //
  18. List<HashMap<String,Object>>data=newArrayList<HashMap<String,Object>>();
  19. //迭代传入
  20. for(Videovideo:videos)
  21. {
  22. //把video中的数据绑定到item中
  23. HashMap<String,Object>item=newHashMap<String,Object>();
  24. item.put("id",video.getId());
  25. item.put("title",video.getTitle());
  26. item.put("timelength","时长:"+video.getTime());
  27. data.add(item);
  28. }
  29. //使用SimpleAdapter处理ListView显示数据
  30. SimpleAdapteradapter=newSimpleAdapter(this,data,R.layout.item,
  31. newString[]{"title","timelength"},newint[]{R.id.title,R.id.timelength});
  32. //
  33. listView.setAdapter(adapter);
  34. }
  35. catch(Exceptione)
  36. {
  37. Toast.makeText(MainActivity.this,"获取最新视频资讯失败",1).show();
  38. Log.e("MainActivity",e.toString());
  39. }
  40. }
  41. }

更多相关文章

  1. 类和 Json对象
  2. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  3. Android4.4.2 获取NTP时间,并设置系统时间
  4. android的PreferenceActivity
  5. android 获取http网络图片保存png
  6. android使用键盘钩子实现按键劫持
  7. 低功耗蓝牙(BLE)之概念理解
  8. 获取Android的Java源代码并在Eclipse中关联查看
  9. 带着问题学习 Android(安卓)Handler 消息机制

随机推荐

  1. Android入门教程(三)之------导入现有And
  2. Android多进程
  3. Android类装载机制
  4. Android(安卓)中Animation简单例子
  5. Android(安卓)Studio中使用com.android.s
  6. 《Android/OPhone开发完全讲义》连载(5):Not
  7. 【Android开机启动Activity或者Service方
  8. 获取Android设备唯一标识
  9. Android常用开源库(模块部分)
  10. Android跨进程通信之非AIDL(二)