服务器端:

Javabean

public class News {private int id;private String name;private Integer timeLength;public News() {}public News(int id, String name, int timeLength) {this.id = id;this.name = name;this.timeLength = timeLength;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name){this.name = name;}public IntegergetTimeLength() {return timeLength;}public voidsetTimeLength(Integer timeLength) {this.timeLength = timeLength;}}

Filter字符编码过滤器

public class CharacterEncodingFilter implements Filter {public voiddoFilter(ServletRequest request, ServletResponse response,FilterChainchain) throws IOException, ServletException { HttpServletRequestreq = (HttpServletRequest) request;HttpServletResponseres = (HttpServletResponse) response;req.setCharacterEncoding("UTF-8");res.setCharacterEncoding("UTF-8");chain.doFilter(new WarpEncodingRequest(req),response);}public void destroy() {}public void init(FilterConfigarg0) throws ServletException {}}class WarpEncodingRequest extendsHttpServletRequestWrapper{privateHttpServletRequest  request =(HttpServletRequest) this.getRequest() ;publicWarpEncodingRequest(HttpServletRequest request) {super(request);// TODO Auto-generated constructor stub}@Overridepublic StringgetParameter(String name) {try {Stringval = request.getParameter(name);if(val == null){return null;}if(request.getMethod().equalsIgnoreCase("POST")){return val;}     return newString(val.getBytes("ISO8859-1"),"UTF-8");}catch (Exception e) {throw newRuntimeException(e);}}
}

业务类

public class VedioServiceImpl implements VedioService {public List<News>getlastNews(){//简单地进行数据获取List<News>ns = new ArrayList<News>();ns.add(new News(1,"康斯坦丁",50));ns.add(new News(2,"少年厨艺大师",40));ns.add(new News(3,"NBA",20));ns.add(new News(4,"康斯",20));ns.add(new News(5,"坦丁",20));return ns;}
}

Servlet

public class ListNewsServlet extends HttpServlet {private VedioService service = new VedioServiceImpl();//servlet转发到jsp中生成json数据或xml数据public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {    List<News>ns = service.getlastNews();   Stringformat = request.getParameter("format");if("json".equalsIgnoreCase(format)){      //判断是否请求时Json格式StringBuildersb = new StringBuilder("[");   //组拼json格式数据for(News n :ns){sb.append("{");sb.append("id:").append(n.getId()).append(",");sb.append("name:\"").append(n.getName()).append("\",");sb.append("timeLength:").append(n.getTimeLength());sb.append("},");           }                sb.deleteCharAt(sb.length()-1);sb.append("]");request.setAttribute("json", sb.toString());request.getRequestDispatcher("/WEB-INF/Jnews.jsp").forward(request, response);}else{request.setAttribute("ns", ns);request.getRequestDispatcher("/WEB-INF/news.jsp").forward(request, response);}}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {doGet(request,response);}
}

转发的jsp

News.jsp

<?xml version="1.0"encoding="UTF-8"?><%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<vedionews><c:forEach  items="${ns}"var="news"><news id="${news.id}"><name>${news.name}</name><timelength>${news.timeLength}</timelength></news></c:forEach>
</vedionews>

Json格式数据

JNews.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8" contentType="text/plain;charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
${json}

Android客户端


目录结构


布局文件:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><ListViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/listView"></ListView>
</LinearLayout>

Items.xml

<?xml version="1.0"encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent" ><TextViewandroid:layout_width="80px"android:layout_height="wrap_content"android:id="@+id/name"/><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/timeLength"/></LinearLayout>

News.java

public class News {private int id;private String name;private Integer timeLength;public News() {}public News(int id, String name, int timeLength) {this.id = id;this.name = name;this.timeLength = timeLength;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name){this.name = name;}public IntegergetTimeLength() {return timeLength;}public voidsetTimeLength(Integer timeLength) {this.timeLength = timeLength;}}

MainActivity

public class MainActivity extends Activity {private VedioNewsService service = new  VedioNewsService();@Overrideprotected void onCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListViewlistView = (ListView) this.findViewById(R.id.listView);try {
//         List<News>ns = service.getUpdateNews();         //通过服务类获取xml数据 List<News>ns = service.getUpdateNewsJson();     //通过服务类获取json数据List<Map<String,Object>>data = new ArrayList<Map<String,Object>>();for(News n :ns){Map<String,Object>m = new HashMap<String, Object>();m.put("id", n.getId());m.put("name", n.getName());m.put("timeLength", n.getTimeLength());Log.i("onCreate", n.getName()+"000");data.add(m);}  //创建适配器,处理数据SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.items, new String[]{"name","timeLength"}, new int[]{R.id.name,R.id.timeLength});listView.setAdapter(adapter);}catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

Service类

public class VedioNewsService {/*** 获取新闻更新的信息__xml* @return   新闻信息* @throws IOException* @throws XmlPullParserException*/public List<News>getUpdateNews() throws IOException, XmlPullParserException{URLurl = new URL("http://172.16.121.10:8080/VedioNews/servlet/ListNewsServlet");HttpURLConnectionconn =  (HttpURLConnection)url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if(conn.getResponseCode()== 200){InputStreamin = conn.getInputStream();return parseNews(in);}return null;}/*** 获取新闻更新的信息__json* @return   新闻信息* @throws IOException* @throws XmlPullParserException*/public List<News>getUpdateNewsJson() throws Exception {URLurl = new URL("http://172.16.121.10:8080/VedioNews/servlet/ListNewsServlet?format=json");HttpURLConnectionconn =  (HttpURLConnection)url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if(conn.getResponseCode()== 200){InputStreamin = conn.getInputStream();return parseNews(in);}return null;}/*** 解析json数据* @param输入流* @return  * @throws Exception*/private List<News> parseJson(InputStreamin) throws Exception {byte[] data = StreamTool.read(in);List<News>list = new ArrayList<News>();Stringjson = new String(data);Log.i("xxxx", json);JSONArrayarray = new JSONArray(json);    //json数据构造成json数组对象for(int i =0;i<array.length();i++){JSONObjecto =  array.getJSONObject(i);   //获得具体索引值得json对象Newsnews = new News(o.getInt("id"),o.getString("name"),o.getInt("timeLength"));list.add(news);     }  return list;}/*** pull解析xml文档* @param输入流* @return* @throws XmlPullParserException* @throws IOException*/private List<News>parseNews(InputStream in) throws XmlPullParserException, IOException {List<News>ns = new ArrayList<News>();Newsnews = null;XmlPullParserparse = Xml.newPullParser();parse.setInput(in,"UTF-8");int event =parse.getEventType();while(event !=XmlPullParser.END_DOCUMENT){    switch (event) {case XmlPullParser.START_TAG:if(parse.getName().equals("news")){int id = newInteger(parse.getAttributeValue(0));news= new News();news.setId(id);                }else if(parse.getName().equals("name")){news.setName(parse.nextText());}else if(parse.getName().equals("timelength")){news.setTimeLength(newInteger(parse.nextText()));}break;case XmlPullParser.END_TAG:if(parse.getName().equals("news")){ns.add(news);news=null;}break;}event= parse.next();}return ns;}}

工具类:

public class StreamTool {public static byte[] read(InputStreamin) throws Exception {ByteArrayOutputStreamout = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0 ;while((len =in.read(buffer)) != -1){out.write(buffer,0, len);}in.close();return out.toByteArray();}}


Android网络通信(一)相关推荐

  1. android网络通信之SOAP教程实例汇总

    一.实例教程:Android网络通信之 SOAP教程篇: 1.android webservice通信之ksoap http://www.eoeandroid.com/thread-162563-1- ...

  2. Android 网络通信框架Volley简介(Google IO 2013)

    Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...

  3. android 网络通信框架volly

    1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...

  4. android网络通信之HTTP协议教程实例汇总

    在现在的开发和应用中,网络通讯是必不可少的.虽然还是比较怀念小时候,抱着一台95在那里玩单机游戏玩的天昏地暗的时光,但是,现在,就算一个幼儿园的小盆友如果问你要手机玩游戏,突然发现居然买不了冰激凌草莓 ...

  5. Android 网络通信架构学习

    最近跟着云课堂上的极客学院做安卓APP,学习了课程里面介绍的一种网络通信架构.清晰明了,比我自己东一块西一块拼凑出来的要好很多.在这里记录一下. 云课堂的连接:http://study.163.com ...

  6. sunny底层android,Android网络通信概述

    网络通信在App的使用中占据重要地位,要实现网络通信,从宏观上分为两种方式,即:调用原生类和使用第三方框架. 调用原生类 Android中通过原生类进行网络通信时,根据业务场景的不同,主要分为两种方式 ...

  7. 《移动项目实践》实验报告——Android网络通信

    实验目的 掌握数据解析(以json为例).网络请求的关键内容. 实验内容 1.接口示例(北京)http://www.weather.com.cn/data/sk/101010100.html 2.可选 ...

  8. Android网络通信的六种方式示例代码

    表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包                      描述                        ...

  9. Android网络通信的六种方式

    在Android中几种网络编程的方式: (1)针对TCP/IP的Socket.ServerSocket (2)针对UDP的DatagramSocket.DatagramPackage.这里需要注意的是 ...

最新文章

  1. 2022-2028年中国聚硫橡胶行业市场研究及前瞻分析报告
  2. 使用PaupGUI软件合并一致性树consensus tree
  3. tomcat 启动异常 The web application [ROOT] registered the JDBC driver [xxx] but failed to unregister it
  4. 7-4 是否同一棵二叉搜索树 (25 分)
  5. C#中其他简单LINQ查询表达式的简单使用介绍
  6. 容器编排技术 -- Kubernetes kubectl create service externalname 命令详解
  7. ffmpeg环境变量设置和安装后不能加载共享库的错误解决
  8. Dnn's Event Logging API
  9. java quartz TriggerBuilder
  10. 复杂查询练习_MySQL基础知识—习题练习
  11. 项目出现 The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path 解决方法
  12. Python标准模块--multiprocessing
  13. Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
  14. 弱电工程标书制作,从入门到精通
  15. 人机对弈黑白棋游戏用Python tkinter的Canvas实现图形界面
  16. 图解数据结构(04) -- 哈希表
  17. 【Shader入门精要】第十四章——卡通风格的渲染
  18. 以文会友,以书传情—山西省侨商联合会召开书画艺术委员会成立大会
  19. win10升级补丁_官方win10教育版怎么样
  20. 彩钢板进行BS 476-3屋顶外露部分防火测试

热门文章

  1. Win系统 - 系统双击文件总弹出属性窗口如何解决?
  2. SAS9.4更新sid,有效期至2022年11月30日
  3. 继续:个人微信的自动收款解决(思路)
  4. 戴尔3080计算机重装系统步骤,戴尔OptiPlex 3080MT台式机重装系统BIOS设置教程
  5. antv g6多次渲染问题解决
  6. 梅科尔工作室--梁嘉莹-鸿蒙笔记3
  7. 本周最新文献速递20210718
  8. Apple和元宇宙,迄今为止我们所知道的一切
  9. 老毛桃制作winPE镜像
  10. 小白不知道raw批量转换jpg怎么转?分享好用的方法