`

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());
		} 
    }
}
 

 

 

 

分享到:
评论

相关推荐

    从网络获取XML数据并且显示出来

    本话题主要探讨如何从网络获取XML数据并将其有效地呈现给用户,我们将会深入Android和Web应用两个方面来阐述这一过程。 首先,XML(Extensible Markup Language)是一种结构化数据格式,广泛用于数据交换,因为它...

    Android使用XML和JSON两种数据格式通过网络通信实现资讯客户端案例

    本案例主要探讨了如何利用XML和JSON这两种数据格式进行网络通信,从而实现资讯的获取和展示。接下来,我们将深入讨论这两个数据格式以及它们在Android中的应用。 XML(eXtensible Markup Language)是一种结构化...

    android手机客户端获取服务器端的json数据的demo

    在Android开发中,获取服务器端的数据是常见的需求,特别是JSON格式的数据,因其轻量级、易解析的特性,被广泛应用于移动应用与后端服务之间的数据交换。本demo旨在展示如何在Android手机客户端通过WiFi连接服务器,...

    读取网络json文件并保存到指定xml文件代码

    在Android开发中,有时我们需要从网络获取JSON数据,并将其转换为XML格式,以便于本地存储或进一步处理。这个过程涉及到网络请求、JSON解析和XML序列化等技术。下面将详细介绍如何实现这一功能。 首先,我们需要从...

    网络连接和XML,JSON解析

    网络连接和XML、JSON解析是现代应用程序开发中的关键部分,特别是在构建网络应用...在实际项目中,根据需求选择合适的网络库和数据格式,优化网络请求,以及高效地解析和处理数据,都能显著提升应用的性能和用户体验。

    Android JSON网络数据交换_基本应用样例

    在`JSONActivity`中编写代码,使用HTTP库(如HttpURLConnection或OkHttp)发起网络请求,获取服务器返回的JSON数据。同时,要在`AndroidManifest.xml`中添加Internet权限,否则无法访问网络。 7. **解析JSON数据**...

    实例03获取JSON数据,显示计步器的个人信息.rar

    在Android开发中,获取JSON数据并将其展示在应用中是一项常见的任务,特别是在构建与服务器进行交互的移动应用时。这个实例“实例03获取JSON数据,显示计步器的个人信息.rar”显然涉及到从服务器获取JSON格式的数据...

    android接收json例子struts2Action返回json格式数据

    JSON是一种数据格式,它基于JavaScript语法,但独立于语言,易于人阅读和编写,同时也易于机器解析和生成。JSON数据通常包含键值对,其中键是字符串,值可以是各种数据类型,如字符串、数字、数组、对象等。 在...

    json 解析 xml

    JSON是一种轻量级的文本数据格式,它基于JavaScript语法,但并不依赖JavaScript。在Android中,JSON解析主要分为两个过程:解析(将JSON字符串转化为Java对象)和序列化(将Java对象转化为JSON字符串)。 1. **解析...

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

    在IT行业中,网络请求是应用程序与服务器交互的基础,XML和JSON则是常见的数据交换格式。本教程将通过一个名为"HTTP请求网络解析XML以及JSON的demo"的实例,深入讲解如何利用Java实现这两种请求方式,并对返回的数据...

    ListView获取网络数据

    2. **数据格式**:服务器返回的数据通常是JSON或XML格式。JSON因其简洁高效而被广泛使用。Android提供了Gson库用于JSON数据的解析,也可以使用org.json库手动解析。 3. **异步处理**:由于网络操作是耗时的,我们...

    天气预报小项目,内加获取json数据等等

    标题中的“天气预报小项目,内加获取json数据等等”表明这是一个关于开发天气预报应用的实践项目,其中涉及了从网络获取JSON数据并进行解析,最终可能将其存储到数据库中以便于后续展示和使用。JSON(JavaScript ...

    安卓通过json获取webservlet上的数据

    在Android开发中,与Web服务器进行数据交互是一个常见的任务,其中JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Android与Web服务器之间的数据通信。本主题主要探讨如何在Android...

    Android XML和JSON解析代码

    在Android开发中,数据交换和存储经常涉及到XML和JSON这两种数据格式。XML(Extensible Markup Language)是一种结构化的数据格式,常用于存储和传输数据,而JSON(JavaScript Object Notation)则是轻量级的、易于...

    Android HTTP网络请求获取JSON数据

    在Android应用开发中,HTTP网络请求是连接服务器并获取数据的一种常见方式,特别是在现代移动应用中,通过HTTP接口获取JSON格式的数据尤为普遍。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,...

    android 调用Json xml例子

    当从网络获取JSON或XML数据时,可以使用`HttpURLConnection`、`OkHttp`或`Volley`等网络库。获取到数据后,可以使用上述方法进行解析。例如,使用Volley进行JSON解析: ```java RequestQueue queue = Volley....

    安卓Android源码——获取网络数据到本地并查看.zip

    通过上述步骤,我们可以从网络获取数据,将其解析并存储在本地,然后在需要时展示给用户。在实际项目中,还需要考虑到错误处理、数据缓存、性能优化等细节。这个压缩包中的源码应该包含了这些功能的实现,供开发者...

    android使用JSON进行网络数据交换(服务端、客户端)的实现.rar

    Jackson则是一个高性能的库,支持XML、JSON等多种数据格式的序列化和反序列化。 3. Android网络请求: 客户端与服务器通信通常使用HTTP或HTTPS协议。Android提供了多种方式实现网络请求,如HttpURLConnection、...

    安卓访问网络图片、文本、解析xml、json的实现

    在安卓开发中,访问网络资源是一项基础且重要的任务,涵盖了从获取简单的文本数据到解析复杂的XML和JSON格式的数据。以下是对这些知识点的详细说明: 首先,让我们从访问网络图片开始。在Android中,我们可以使用...

    拼接xml调用webservice

    RESTful服务基于HTTP方法(GET、POST、PUT、DELETE等),且通常返回JSON格式的数据,而不是XML。然而,对于理解XML拼接和Web Service调用的基本原理,上述SOAP的讨论仍然适用。 通过以上步骤,我们可以理解如何...

Global site tag (gtag.js) - Google Analytics