获取web服务器xml数据总结

来源:互联网 发布:织梦cms是免费的吗 编辑:程序博客网 时间:2024/04/28 13:15

今天我们学习了获取web服务器xml数据,总结如下:

获取web服务器xml数据:

实验步骤:

1、 配置J2EE开发环境,并部署web应用viderweb,启动服务

2、 打开浏览器访问网址

http://localhost:8080/videoweb/video/list.do

演示xml数据

3创建android客户端工程,实现访问上面的网址并且将取得的xml数据进行解析并显示,

资源

<resources>

    <string name="app_name">显示网络数据</string>

    <string name="error">下载图片失败</string>

</resources>

布局

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <ListView

        android:id="@+id/listView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" />

</LinearLayout>

Item.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal" >

    <TextView

        android:id="@+id/title"

        android:layout_width="250dip"

        android:layout_height="wrap_content" />

    <TextView

        android:id="@+id/timelength"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />

</LinearLayout>

添加业务bean类Video

package cn.class3g.domain;

public class Video {

private Integer id;

private String title;

private Integer timelength;

public Video(Integer id, String title, Integer timelength) {

super();

this.id = id;

this.title = title;

this.timelength = timelength;

}

public Video() { }

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public Integer getTimelength() {

return timelength;

}

public void setTimelength(Integer timelength) {

this.timelength = timelength;

}

public String toString() {

return "Video [id=" + id + ", title=" + title + ", timelength="

+ timelength + "]";

}

}

添加业务类VideoService类

package cn.class3g.service;

...

public class VideoService {

/**

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

 * 

 * @return

 * @throws Throwable

 */

public static List<Video> getLastVideos() throws Throwable {

String path = 

"http://192.168.1.102:8080/videoweb/video/list.do";

URL url = new URL(path);

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

conn.setConnectTimeout(5 * 1000);

conn.setRequestMethod("GET");

InputStream inStream = conn.getInputStream();

return parseXML(inStream);

}

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

Video video = null;

List<Video> videos = null;

XmlPullParser pullParser = Xml.newPullParser();

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

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

while (event != XmlPullParser.END_DOCUMENT) {

switch (event) {

case XmlPullParser.START_DOCUMENT:

videos = new ArrayList<Video>();

break;

case XmlPullParser.START_TAG:

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

int id = 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(new Integer(pullParser.nextText()));

}

}

break;

case XmlPullParser.END_TAG:

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

videos.add(video);

video = null;

}

break;

}

event = pullParser.next();

}

return videos;

}

}

Activity类MyVideoNewsActivity

public class MyVideoNewsActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        try {

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

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

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

for(Video video : 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);

}

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 (Throwable e) {

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

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

}    

    }

}

运行显示其效果:

Androd中获取网页代码

布局

<Button 

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/btn_text"

    android:id="@+id/showBtn"

    />

<ImageView

    android:layout_width="wrap_content" 

    android:layout_height="wrap_content" 

    android:id="@+id/imageView"

    />   

代码:在前面的ImageService.getImage()方法基础上修改即可

HtmlService

public class HtmlService {

/**

 * 获取给定路径的html代码

 * @param path 网页路径

 * @return

 * @throws Exception

 */

public static String getHtml(String path) throws Exception{

URL url = new URL(path);

//get //post

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

conn.setRequestMethod("GET");

conn.setConnectTimeout(5*1000);

InputStream inStream = conn.getInputStream();

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

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

outStream.write(buffer, 0, len);

}

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

outStream.close();

inStream.close();

return new String(data, "gb2312");

}

}

ShowHtmlActivity

public void onClick(View v) {

String path = pathText.getText().toString();

try {

String htmlcode = HtmlService.getHtml(path);

resultView.setText(htmlcode);

} catch (Exception e) {

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

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

}

}

显示效果:



原创粉丝点击