Android--网络通讯

一、获取网络资源

客户端代码:

package com.net.demo.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Log;

import com.net.demo.domain.Video;
import com.net.demo.util.AppConstant;
import com.net.demo.util.NetUtil;

public class NetService {

	private static final int TIMEOUT = 5000;

	/**
	 * 获取网络资源的二进制数据
	 * @param urlStr
	 * @return
	 * @throws Exception
	 */
	public byte[] getData(String urlStr) throws Exception {
		URL url = new URL(urlStr);
		HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
		httpConnection.setRequestMethod("GET");
		httpConnection.setConnectTimeout(TIMEOUT);
		InputStream inStream = httpConnection.getInputStream();
		return NetUtil.readDataFromInputStream(inStream);
	}

	/**
	 * 从网络获取xml文件并解析
	 * @param urlStr
	 * @return
	 * @throws Exception
	 */
	public List<Video> getLastVideosFromXML(String urlStr) throws Exception {
		HttpURLConnection conn = (HttpURLConnection) getURLConnection(urlStr);
		conn.setReadTimeout(TIMEOUT);
		conn.setRequestMethod("GET");
		InputStream inStream = conn.getInputStream();
		return parseXml(inStream, "UTF-8");
	}

	/**
	 * 从网络获取json数据并解析
	 * @param urlStr
	 * @return
	 * @throws Exception
	 */
	public List<Video> getLastVideosFromJSON(String urlStr) throws Exception {
		HttpURLConnection conn = (HttpURLConnection) getURLConnection(urlStr);
		conn.setReadTimeout(TIMEOUT);
		conn.setRequestMethod("GET");
		InputStream inStream = conn.getInputStream();
		byte[] data = NetUtil.readDataFromInputStream(inStream);
		String jsonStr = new String(data);
		Log.d(AppConstant.TAG, jsonStr);
		return parseJSON(jsonStr);
	}

	private URLConnection getURLConnection(String urlStr) throws Exception {
		URL url = new URL(urlStr);
		return url.openConnection();
	}

	private List<Video> parseXml(InputStream inStream, String enc) throws Exception {

		List<Video> videos = null;
		Video video = null;

		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		XmlPullParser parser = factory.newPullParser();
		parser.setInput(inStream, enc);

		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 tagName = parser.getName();
				if ("video".equals(tagName)) {
					video = new Video();
					video.setId(Integer.valueOf(parser.getAttributeValue(0)));
				}
				if (video != null) {
					if ("title".equals(tagName)) {
						video.setTitle(parser.nextText());
					}
					if ("timelength".equals(tagName)) {
						video.setTime(Integer.valueOf(parser.nextText()));
					}
				}
				break;
			case XmlPullParser.END_TAG:
				if ("video".equals(parser.getName())) {
					videos.add(video);
					video = null;
				}
				break;
			}
			eventType = parser.next();
		}

		return videos;
	}

	private List<Video> parseJSON(String jsonData) throws Exception {
		
		List<Video> videos = new ArrayList<Video>();
		JSONArray jsonArray = new JSONArray(jsonData);
		int len = jsonArray.length();
		
		for (int i = 0; i < len; i++) {
			JSONObject jsonObj = jsonArray.getJSONObject(i);
			int id = jsonObj.getInt("id");
			String title = jsonObj.getString("title");
			int timelength = jsonObj.getInt("timelength");
			videos.add(new Video(id, title, timelength));
		}
		return videos;
	}
}
测试类:

package com.net.demo;

import java.util.List;

import android.test.AndroidTestCase;
import android.util.Log;

import com.net.demo.domain.Video;
import com.net.demo.service.NetService;
import com.net.demo.util.AppConstant;

public class NetTest extends AndroidTestCase {

	public void testGetData() throws Throwable {
		NetService nService = new NetService();
		byte[] data = nService.getData("http://www.tuswallpapersgratis.com/images/wallpapers/corazon_de_fuego-1024x768-250510.jpeg");
		Log.d(AppConstant.TAG, "数据的大小:" + data.length);
	}

	public void testPullParser() throws Throwable {
		String urlStr = "http://192.168.1.2:8080/videoweb/video/list.do?format=xml";
		NetService nService = new NetService();
		List<Video> videos = nService.getLastVideosFromXML(urlStr);
		for (Video video : videos) {
			Log.d(AppConstant.TAG, video.toString());
		}
	}

	public void testJsonParser() throws Throwable {
		String urlStr = "http://192.168.1.2:8080/videoweb/video/list.do?format=json";
		NetService nService = new NetService();
		List<Video> videos = nService.getLastVideosFromJSON(urlStr);
		for (Video video : videos) {
			Log.d(AppConstant.TAG, video.toString());
		}
	}
}
服务器端代码
package com.demo.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.demo.domain.Video;
import com.demo.formbean.VideoForm;
import com.demo.service.VideoService;
import com.demo.service.impl.VideoServiceBean;

public class VideoListAction extends Action {
	private VideoService service = new VideoServiceBean();

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

		VideoForm videoForm = (VideoForm) form;
		String format = videoForm.getFormat();

		List<Video> videos = service.getlastVideos();

		if ("xml".equals(format)) {
			request.setAttribute("xmlvideos", videos);

			return mapping.findForward("xmlvideo");
			
		} else if ("json".equals(format)) {
			StringBuilder sb = new StringBuilder();
			sb.append('[');
			for (Video video : videos) {
				sb.append('{');
				sb.append("id").append(':').append(video.getId()).append(',');
				sb.append("title").append(':').append(video.getTitle()).append(',');
				sb.append("timelength").append(':').append(video.getTime());
				sb.append('}');
				sb.append(',');
			}
			sb.deleteCharAt(sb.length() - 1);
			sb.append(']');

			request.setAttribute("jsonvideos", sb.toString());

			return mapping.findForward("jsonvideo");
			
		} else {
			request.setAttribute("xmlvideos", videos);

			return mapping.findForward("xmlvideo");
		}
	}
}

package com.demo.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.demo.domain.Video;
import com.demo.service.VideoService;

public class VideoServiceBean implements VideoService {

	@Override
	public List<Video> getlastVideos() throws Exception {
		List<Video> videos = new ArrayList<Video>();
		videos.add(new Video(11, "aa", 70));
		videos.add(new Video(12, "bb", 80));
		videos.add(new Video(13, "cc", 90));
		System.out.println(videos.toString());
		return videos;
	}
}
xmlvideo.jsp:

<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %><?xml version="1.0" encoding="UTF-8"?>
<videos>
	<c:forEach items="${xmlvideos}" var="video">
		<video id="${video.id }">
			<title>${video.title }</title>
			<timelength>${video.time }</timelength>
		</video>
	</c:forEach>
</videos>

jsonvideo.jsp:

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



你可能感兴趣的:(Android--网络通讯)