从服务器获取最新的视频资讯

package cn.itcast.service;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import org.json.JSONArray;

import org.json.JSONObject;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import cn.itcast.domain.Video;

import cn.itcast.utils.StreamTool;

public class VideoService {

/**

* 从服务器获取最新的视频资讯

* @return

* @throws Throwable

*/

publicstatic List<Video> getLastJSONVideos() throws Throwable{

ArrayList<Video>videos = new ArrayList<Video>();

Stringpath = "http://192.168.1.10:8080/videoweb/video/list.do?format=json";

URLurl = new URL(path);

HttpURLConnection conn =(HttpURLConnection)url.openConnection();

解析:每个 HttpURLConnection实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络。请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的网络资源,但对共享的持久连接没有任何影响。如果在调用 disconnect() 时持久连接空闲,则可能关闭基础套接字。

conn.setConnectTimeout(5*1000);

conn.setRequestMethod("GET");

InputStreaminStream = conn.getInputStream();

byte[]data = StreamTool.readInputStream(inStream);

Stringjson = new String(data);

JSONArrayarray = new JSONArray(json);

for(inti = 0 ; i < array.length() ; i++){

JSONObjectitem = array.getJSONObject(i);

Videovideo = new Video(item.getInt("id"),item.getString("title"), item.getInt("timelength"));

videos.add(video);

}

returnvideos;

}

/**

* 从服务器获取最新的视频资讯

* @return

* @throws Throwable

*/

publicstatic List<Video> getLastVideos() throws Throwable{

Stringpath = "http://192.168.1.10:8080/videoweb/video/list.do";

URLurl = new URL(path);

HttpURLConnectionconn = (HttpURLConnection)url.openConnection();

conn.setConnectTimeout(5*1000);

conn.setRequestMethod("GET");

InputStreaminStream = conn.getInputStream();

returnparseXML(inStream);

}

privatestatic List<Video> parseXML(InputStream inStream) throws Exception{

Videovideo = null;

List<Video>videos = null;

XmlPullParserpullParser = Xml.newPullParser();

pullParser.setInput(inStream,"UTF-8");

intevent = pullParser.getEventType();//触发第一个事件

while(event!=XmlPullParser.END_DOCUMENT){

switch(event) {

caseXmlPullParser.START_DOCUMENT:

videos= new ArrayList<Video>();初始化对象

break;

caseXmlPullParser.START_TAG:

if("video".equals(pullParser.getName())){

intid = new Integer(pullParser.getAttributeValue(0));

video= new Video();

video.setId(id);

}

if(video!=null){

if("title".equals(pullParser.getName())){

video.setTitle(pullParser.nextText());

}

if("timelength".equals(pullParser.getName())){

video.setTimelength(newInteger(pullParser.nextText()));

}

}

break;

caseXmlPullParser.END_TAG:

if("video".equals(pullParser.getName())){

videos.add(video);

video= null;

}

break;

}

event= pullParser.next();

}

returnvideos;

}

}

测试方法

package cn.itcast.videonews;

import java.util.List;

import cn.itcast.domain.Video;

import cn.itcast.service.VideoService;

import android.test.AndroidTestCase;

import android.util.Log;

public class VideoServiceTest extendsAndroidTestCase {

privatestatic final String TAG = "VideoServiceTest";

publicvoid testGetLastVideos() throws Throwable{

List<Video>videos = VideoService.getLastVideos();

for(Videovideo : videos){

Log.i(TAG,video.toString());把信息打印到控制台

}

}

}

从输入流中读取数据

package cn.itcast.utils;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

public class StreamTool {

/**

* 从输入流中读取数据

* @param inStream

* @return

* @throws Exception

*/

publicstatic byte[] readInputStream(InputStream inStream) throws Exception{

ByteArrayOutputStreamoutStream = new ByteArrayOutputStream();

解析:此类实现了一个输出流,其中的数据被写入一个byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用toByteArray()toString() 获取数据。

关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException。

byte[]buffer = new byte[1024];

intlen = 0;

while((len = inStream.read(buffer)) !=-1 ){

outStream.write(buffer,0, len);

}

byte[]data = outStream.toByteArray();//获取网页的二进制数据

outStream.close();

inStream.close();

returndata;

}

}

package cn.itcast.videonews;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import cn.itcast.domain.Video;

import cn.itcast.service.VideoService;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MainActivity extendsActivity {

private static final String TAG = "MainActivity";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

try {

List<Video>videos = VideoService.getLastJSONVideos();//获取最新视频资讯

ListViewlistView = (ListView)this.findViewById(R.id.listView);

List<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();

for(Videovideo : videos){

HashMap<String,Object> item = new HashMap<String, Object>();

item.put("title",video.getTitle());

item.put("timelength","时长:"+video.getTimelength());

item.put("id",video.getId());

data.add(item);

}

SimpleAdapteradapter = new SimpleAdapter(this, data, R.layout.item,

newString[]{"title","timelength"}, new int[]{R.id.title,R.id.timelength});

listView.setAdapter(adapter);

}catch (Throwable e) {

Log.e(TAG,e.toString());

Toast.makeText(this,R.string.error, 1).show();

}

}

}

package cn.itcast.utils;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

public class StreamTool {

/**

* 从输入流中读取数据

* @param inStream

* @return

* @throws Exception

*/

publicstatic byte[] readInputStream(InputStream inStream) throws Exception{

ByteArrayOutputStreamoutStream = new ByteArrayOutputStream();

byte[]buffer = new byte[1024];

intlen = 0;

while((len = inStream.read(buffer)) !=-1 ){

outStream.write(buffer,0, len);

}

byte[]data = outStream.toByteArray();//网页的二进制数据

outStream.close();

inStream.close();

returndata;

}

}

更多相关文章

  1. Android之ImageSwitcher的实例详解
  2. Android 数据查询query函数参数解析
  3. Android向服务器提交数据(方式:get、post、AsyncHttpClient )
  4. Android栗子の图片验证码生成实例代码
  5. Android 登陆、提交数据或者加载数据时提示页面
  6. Android中解析json数据的方式之一:Gson
  7. Android应用开发基础之数据存储和界面展现(一)
  8. Android Bluetooth蓝牙开发:Bluetooth蓝牙设备之间数据传输(4)
  9. 【Android】刮刮卡实例

随机推荐

  1. 不知这117人会不会也被狗不理报警处理?
  2. 一道看完答案你会觉得很沙雕的「动态规划
  3. 又一套!微软在 GitHub 新发的 Python 视频
  4. 恶意 Python 库偷 SSH 密钥!请自查是否中
  5. 海象操作符!Python 3.8 的新特性汇总
  6. 干货丨前端chart组件展示DolphinDB数据教
  7. 算法面试经常需要你手写的三个排序算法(Py
  8. LeetCode 实战:「图解」K 个一组翻转链表
  9. 植树节,程序猿种的那些树
  10. 两分钟看完一道数学思想的算法题