`

httpURLConnection获取网络数据:XML格式返回与Json格式返回

    博客分类:
  • java
 
阅读更多

 

1.服务器端代码样例:

 

public class VideoListAction extends Action 
{
	private VideoService service = new VideoServiceBean();
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception 
	{
		//得到最新的视频资讯
		List<Video> videos = service.getLastVideos();
		VideoForm formbean = (VideoForm)form;
		if("json".equals(formbean.getFormat()))
		{
			//构建json字符串
			StringBuilder json = new StringBuilder();
			json.append('[');
			for(Video video : videos)
			{ // 需要构造的形式是{id:76,title:"xxxx",timelength:80}
				json.append('{');
				json.append("id:").append(video.getId()).append(',');
				json.append("title:\"").append(video.getTitle()).append("\",");
				json.append("timelength:").append(video.getTime());
				json.append('}').append(',');
			}
			json.deleteCharAt(json.length()-1);
			json.append(']');
			//把json字符串放置于request
			request.setAttribute("json", json.toString());
			return mapping.findForward("jsonvideo");
		}
		else
		{			
			request.setAttribute("videos", videos);
			return mapping.findForward("video");
		}
	}
}

 

 

 

public class VideoServiceBean implements VideoService 
{
	public List<Video> getLastVideos() throws Exception
	{
		//理论上应该查询数据库
		List<Video> videos = new ArrayList<Video>();
		videos.add(new Video(78, "喜羊羊与灰太狼全集", 90));
		videos.add(new Video(78, "实拍舰载直升东海救援演习", 20));
		videos.add(new Video(78, "喀麦隆VS荷兰", 30));
		return videos;
	}
}

 

 

 

public class VideoListAction extends Action 
{
	private VideoService service = new VideoServiceBean();
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception 
	{
		//得到最新的视频资讯
		List<Video> videos = service.getLastVideos();
		VideoForm formbean = (VideoForm)form;
		if("json".equals(formbean.getFormat()))
		{
			//构建json字符串
			StringBuilder json = new StringBuilder();
			json.append('[');
			for(Video video : videos)
			{ // 需要构造的形式是{id:76,title:"xxxx",timelength:80}
				json.append('{');
				json.append("id:").append(video.getId()).append(',');
				json.append("title:\"").append(video.getTitle()).append("\",");
				json.append("timelength:").append(video.getTime());
				json.append('}').append(',');
			}
			json.deleteCharAt(json.length()-1);
			json.append(']');
			//把json字符串放置于request
			request.setAttribute("json", json.toString());
			return mapping.findForward("jsonvideo");
		}
		else
		{			
			request.setAttribute("videos", videos);
			return mapping.findForward("video");
		}
	}
}

 

 

 

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

 

 

 

 

public class VideoService 
{
	/**
	 * 以XML方式返回获取最新的资讯
	 * @return
	 * @throws Exception
	 */
	public static List<Video> getLastVideos() throws Exception
	{
		//确定请求服务器的地址
		//注意在Android模拟器中访问本机服务器时不可以使用localhost与127字段
		//因为模拟器本身是使用localhost绑定
		String path = "http://192.168.1.100:8080/videoweb/video/list.do";
		//建立一个URL对象
		URL url = new URL(path);
		//得到打开的链接对象
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		//设置请求超时与请求方式
		conn.setReadTimeout(5*1000);
		conn.setRequestMethod("GET");
		//从链接中获取一个输入流对象
		InputStream inStream = conn.getInputStream();
		//对输入流进行解析
		return parseXML(inStream);
	}
	
	/**
	 * 解析服务器返回的协议,得到资讯
	 * @param inStream
	 * @return
	 * @throws Exception
	 */
	private static List<Video> parseXML(InputStream inStream) throws Exception
	{
		List<Video> videos = null;
		Video video = null;
		//使用XmlPullParser
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(inStream, "UTF-8");
		int eventType = parser.getEventType();//产生第一个事件
		//只要不是文档结束事件
		while(eventType!=XmlPullParser.END_DOCUMENT)
		{
			switch (eventType) 
			{
				case XmlPullParser.START_DOCUMENT:
					videos = new ArrayList<Video>();
					break;		
					
				case XmlPullParser.START_TAG:
					//获取解析器当前指向的元素的名称
					String name = parser.getName();
					if("video".equals(name))
					{
						video = new Video();
						//把id属性写入
						video.setId(new Integer(parser.getAttributeValue(0)));
					}
					if(video!=null)
					{
						if("title".equals(name))
						{
							//获取解析器当前指向元素的下一个文本节点的值
							video.setTitle(parser.nextText());
						}
						if("timelength".equals(name))
						{
							//获取解析器当前指向元素的下一个文本节点的值
							video.setTime(new Integer(parser.nextText()));
						}
					}
					break;
					
				case XmlPullParser.END_TAG:
					if("video".equals(parser.getName()))
					{
						videos.add(video);
						video = null;
					}
					break;
			}
			eventType = parser.next();
		}
		return videos;
	}
	
	/**
	 * 以Json方式返回获取最新的资讯,不需要手动解析,JSON自己会进行解析
	 * @return
	 * @throws Exception
	 */
	public static List<Video> getJSONLastVideos() throws Exception
	{
		//
		List<Video> videos = new ArrayList<Video>();
		//
		String path = "http://192.168.1.100:8080/videoweb/video/list.do?format=json";
		//建立一个URL对象
		URL url = new URL(path);
		//得到打开的链接对象
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		//设置请求超时与请求方式
		conn.setReadTimeout(5*1000);
		conn.setRequestMethod("GET");
		//从链接中获取一个输入流对象
		InputStream inStream = conn.getInputStream();
		//调用数据流处理方法
		byte[] data = StreamTool.readInputStream(inStream);
		String json = new String(data);
		//构建JSON数组对象
		JSONArray array = new JSONArray(json);
		//从JSON数组对象读取数据
		for(int i=0 ; i < array.length() ; i++)
		{
			//获取各个属性的值
			JSONObject item = array.getJSONObject(i);
			int id = item.getInt("id");
			String title = item.getString("title");
			int timelength = item.getInt("timelength");
			//构造的对象加入集合当中
			videos.add(new Video(id, title, timelength));
		}
		return videos;
	}
}
 

 


public class StreamTool 
{
	/**
	 * 从输入流中获取数据
	 * @param inStream 输入流
	 * @return
	 * @throws Exception
	 */
	public static byte[] readInputStream(InputStream inStream) throws Exception{
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while( (len=inStream.read(buffer)) != -1 ){
			outStream.write(buffer, 0, len);
		}
		inStream.close();
		return outStream.toByteArray();
	}
}
 

public class MainActivity extends Activity 
{
    private ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取到ListView对象
        listView = (ListView)this.findViewById(R.id.listView);
        try 
        {
        	//通过
        	List<Video> videos = VideoService.getLastVideos();
        	//通过Json方式获取视频内容
			//List<Video> videos2 = VideoService.getJSONLastVideos();
			//
        	List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
			//迭代传入
			for(Video video : videos)
			{
				//把video中的数据绑定到item中
				HashMap<String, Object> item = new HashMap<String, Object>();
				item.put("id", video.getId());
				item.put("title", video.getTitle());
				item.put("timelength", "时长:"+ video.getTime());
				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) 
        {
			Toast.makeText(MainActivity.this, "获取最新视频资讯失败", 1).show();
			Log.e("MainActivity", e.toString());
		} 
    }
}
 

 

 

 

分享到:
评论

相关推荐

    http请求网络解析xml以及JSON的demo

    http请求网络的demo,实现httpUrlConnection与httpClient两种请求方式,并对返回数据进行解析,解析xml和JSON两种格式的数据。

    网络获取json解析json以及子线程显示

    // 下面对获取到的输入流进行读取 reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { ...

    安卓网站交互JSONxmlWebserviceUPnP相关-使用HttpURLConnectionAsyncTask访问webservice接口返回json字符串.rar

    使用HttpURLConnection AsyncTask访问webservice接口(返回json字符串).rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高) private static StringBuffer getJSONData(String urlPath){ try { URL url = new URL(urlPath...

    Android实验七.doc

    s 计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 Android嵌入式软件开发 项目名称 网络数据与服务 班 级 学 号 姓 名 同组人员 无 实验日期 2016.10.18 一、实验目的与要求: 【实验目的】 ...

    Android手机号码归属地的查询

    在EditText中输入待查询号码,获取号码后在子线程中使用HttpUrlconnection获取JSON数据,之后进行解析; 数据获取完成后,在主线程中更新UI,显示获取的号码归属地信息。 布局文件 &lt;?xml version=1.0 encoding=...

    Android开发与应用——张荣,原书配套课件

    5.3.3 获取另一个界面返回结果 5.4 小结 练习 第6章 Android数据存储与共享 6.1 数据存储与共享方式概述 6.2 首选项信息 6.2.1 私有数据存储 6.2.2 公有数据存储与共享 6.3 数据文件 6.3.1 内存...

    ios-ARHttpRequest.zip

    1、提供简明的网络操作API,包括get / post / postJson / postXml / postSoapXml / postFormData / downloadFile / uploadFile等。 2、downloadFile支持断点续传。 3、默认网络操作都为异步方式,提供完成/...

    Android版本更新,多线程下载、断点续传(原创)

    Android版本更新实用的Demo,主要用到了HttpURLConnection、Xml PULL解析(其中也提供了JSON格式的解析)、丰富的辅助类、多线程下载与断点续传,界面虽然丑点但比较实用。如果你下载了该资源无法运行的话,别急着...

    TestOaFileInterface

    HttpUrlConnection,通过post方式提交数据。通过报文(xml)方式提交数据,作为传输的载体,转换成json,赋值到map,传输数据。可以通过SoapUI进行测试。

    Android典型技术模块开发详解

    12.2 JSON格式 12.2.1 基本类型 12.2.2 数组和集合 12.2.3 类对象 12.3 JSON解析 12.4 Gson 12.4.1 简单对象类型转换 12.4.2 数组和集合类型转换 12.5 xStream 12.6 本章小结 第四篇 Android应用开发案例 第13章 ...

    疯狂Android讲义源码

     4.1.5 启动其他Activity并返回结果 185  4.2 Activity的回调机制 189  4.3 Activity的生命周期 190  4.3.1 Activity的生命周期演示 190  4.3.2 Activity与Servlet的相似性与  区别 194  4.4 本章小结 195  ...

    疯狂Android讲义.part2

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    疯狂Android讲义.part1

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    google-http-java-client:Java的Google HTTP客户端库

    高效的JSON和XML数据模型,用于HTTP响应和请求内容的解析和序列化。 JSON和XML库也可以完全插入,并且包括对支持和Android的GSON JSON库。 该库支持以下Java环境: Java 7或更高版本 Android 4.4(奇巧猫) ...

    mockaroo.api:火莫卡鲁

    Mockaroo API 是一个 API,它让我们生成随机数据并插入到我们的数据库中,创建 .xml、.xls、.json 文件。 就是这样。 此 API 基于 JSON 对象。 作者主页: : 如何使用它? MockarooApi mockarooApi = new ...

    精通ANDROID 3(中文版)1/2

    11.1.3 SOAP、JSON和XML分析程序  11.1.4 处理异常  11.1.5 解决多线程问题  11.1.6 有趣的超时  11.1.7 使用HttpURLConnection  11.1.8 使用AndroidHttpClient  11.1.9 使用后台线程(AsyncTask)  ...

    精通Android 3 (中文版)2/2

    11.1.3 SOAP、JSON和XML分析程序  11.1.4 处理异常  11.1.5 解决多线程问题  11.1.6 有趣的超时  11.1.7 使用HttpURLConnection  11.1.8 使用AndroidHttpClient  11.1.9 使用后台线程(AsyncTask)  ...

    Android知识点及重要代码合集 word文档

    8.4 ListView配合AsyncTask加载网络数据——JSON/XML 87 9.1 数据分页策略及算法 106 9.2 分页加载代码 106 9.3解决图文混排的问题(方法1) 109 9.4 进度对话框提示加载和页脚提示加载 118 10.1 实现分页及解决图文...

Global site tag (gtag.js) - Google Analytics