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