Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android網絡編程之獲取網絡上的XML

Android網絡編程之獲取網絡上的XML

編輯:關於Android編程

Android網絡編程之獲取網絡上的XML


請尊重他人的勞動成果,轉載請注明出處:Android網絡編程之獲取網絡上的XML

為要獲取網絡上的XML所以需要服務器端提供的支持。

一、創建服務器端:

服務器端項目結構:

服務器端項目結構

服務器端運行效果圖:

獲取網上的XML服務器端運行效果圖

第一步:創建業務所需的JavaBean

package com.jph.server.model;

import java.util.Date;

/**
 * 新聞實體類
 * @author jph
 * Date:2014.09.26
 */
public class News {
	private Integer id;
	private String title;
	private Date publishDate;
	
	public News(Integer id, String title, Date publishDate) {
		this.id = id;
		this.title = title;
		this.publishDate = publishDate;
	}
	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 Date getPublishDate() {
		return publishDate;
	}
	public void setPublishDate(Date publishDate) {
		this.publishDate = publishDate;
	}	
}

第二步:創建業務邏輯接口和具體實現類

業務接口:

package com.jph.server.service;
import java.util.List;

import com.jph.server.model.News;

public interface XMLService {
	/**
	 * 獲取最新的資訊
	 * @return
	 */
	public List getLastNews();

}

業務接口的實現類:

package com.jph.server.service.impl;

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

import com.jph.server.model.News;
import com.jph.server.service.XMLService;

public class XMLServiceBean implements XMLService {
	/**
	 * 獲取最新的視頻資訊
	 * @return
	 */
	public List getLastNews(){
		List newes = new ArrayList();
		newes.add(new News(1, "jph", new Date(System.currentTimeMillis()+100002)));
		newes.add(new News(2, "admin",new Date(System.currentTimeMillis()+330002)));
		newes.add(new News(3, "tom", new Date(System.currentTimeMillis()+180002)));
		return newes;
	}
}

第三步:創建控制器Servlet

package com.jph.server.xml;

import java.io.IOException;
import java.util.List;

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

import com.jph.server.model.News;
import com.jph.server.service.XMLService;
import com.jph.server.service.impl.XMLServiceBean;

/**
 * 負責響應客戶端的請求:http://xxx/ServerForXML/ServletForXMLServlet
 */
public class ServletForXML extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private XMLService newsService = new XMLServiceBean();

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List newes = newsService.getLastNews();//獲取最新的視頻資訊		
			request.setAttribute("newes", newes);
			//將客戶端的請求轉向news.jsp頁面
			request.getRequestDispatcher("/WEB-INF/page/news.jsp").forward(request, response);
	}
}

第四步:使用jstl標簽生成XML文件

因此需要使用jstl標簽所以需要將jstl.jar與standard.jar兩個jar包導入項目中。

使用jstl標簽在jsp頁面生成XML:

news.jsp頁面:

<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

	
		
			${news.title}
			${news.publishDate}
		
	

至此服務器端項目已經完成。下面開始創建Android端項目。

二、創建Android端:

Android端項目結構:

Android端項目結構

第一步:創建業務所需的JavaBean

提示:因為服務器端和Android端項目都是用Java語言實現的,所以一些組件可以共用,JavaBean便是其中之一。此時我們在搭建Android端項目的時候,完全可以將服務器端項目中JavaBean拿來用。

第二步:創建Android端項目的業務邏輯層

核心代碼:GetXmlAndParse.java:

package com.jph.gxfi.service;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import com.jph.gxfi.model.News;
import android.os.Handler;
import android.os.Message;
import android.util.Xml;

/**
 * 獲取網絡上的xml,並解析
 * @author jph
 * Date:2014.09.26
 */
public class GetXmlAndParse {
	private String url="http://10.219.61.117:8080/ServerForXML/ServletForXML";
	public static final int PARSESUCCWSS=0x2001;
	private Handler handler;
	public GetXmlAndParse(Handler handler) {
		// TODO Auto-generated constructor stub
		this.handler=handler;
	}
	/**
	 * 獲取網絡上的XML
	 */
	public void getXml(){
		new Thread(new Runnable() {			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					HttpURLConnection conn=(HttpURLConnection)new 
							URL(url).openConnection();
					conn.setConnectTimeout(5000);//設置連接超時
					conn.setRequestMethod("GET");
					if (conn.getResponseCode()==200) {
						InputStream inputStream=conn.getInputStream();
						List listNews=pullXml(inputStream);
						if (listNews.size()>0) {//如果解析結果不為空則將解析出的數據發送給UI線程
							Message msg=new Message();
							msg.obj=listNews;
							msg.what=PARSESUCCWSS;
							handler.sendMessage(msg);
						}
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}//和服務器建立連接
			}
		}).start();
	}
	/**
	 * 解析Xml,並將其封裝成
	 * @param inputStream
	 */
	protected List pullXml(InputStream inputStream) {		
		ListlistNews=new ArrayList();
		try {
			XmlPullParser pullParser=Xml.newPullParser();
			News news=null;
			pullParser.setInput(inputStream, "utf-8");
			int eventCode=pullParser.getEventType();
			while (eventCode!=XmlPullParser.END_DOCUMENT) {
				String targetName=pullParser.getName();
				switch (eventCode) {
				case XmlPullParser.START_TAG:					
					if ("news".equals(targetName)) {//處理news的開始節點
						news =new News();
						news.setId(new Integer(pullParser.getAttributeValue(0)));
					}else if ("title".equals(targetName)) {
						news.setTitle(pullParser.nextText());
					}else if ("publishDate".equals(targetName)) {						
						news.setPublishDate(new Date(pullParser.nextText()));
					}
					break;
				case XmlPullParser.END_TAG:
					if ("news".equals(targetName)) {//處理news的結束節點
						listNews.add(news);
					}
					break;
				
				}
				eventCode=pullParser.next();//解析下一個節點(開始節點,結束節點)				
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return listNews;
	}
}

第三步:創建Activity

package com.jph.gxfi.activity;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jph.gxfi.R;
import com.jph.gxfi.model.News;
import com.jph.gxfi.service.GetXmlAndParse;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.app.Activity;

/**
 * 獲取網絡上的xml
 * @author jph
 * Date:2014.09.26
 */
public class MainActivity extends Activity {
	private ListlistNews;
	private ListView list;
	Handler mHandler=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (msg.what) {
			case GetXmlAndParse.PARSESUCCWSS:
				listNews=(List) msg.obj;
				initData();
				break;			
			}
			super.handleMessage(msg);
		}		
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		list=(ListView)findViewById(R.id.list);
		GetXmlAndParse getXmlAndParse=new GetXmlAndParse(mHandler);
		getXmlAndParse.getXml();		
	}
	/**
	 * 將解析後的xml填充到ListView
	 */
	protected void initData() {
		// TODO Auto-generated method stub
		List>items=new ArrayList>();
		for (News news:listNews) {
			Mapitem=new HashMap();
			item.put("id", news.getId());
			item.put("title", news.getTitle());
			item.put("time", convertDate(news.getPublishDate()));
			items.add(item);
		}
		SimpleAdapter adapter=new SimpleAdapter(this, items, R.layout.line, new String[]
				{"id","title","time"}, new int[]{R.id.tvId,R.id.tvTitle,R.id.tvTime});
		list.setAdapter(adapter);
	}
	private String convertDate(Date publishDate) {
		// TODO Auto-generated method stub
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");		
		return sdf.format(publishDate);
	}
}

至此Android端項目已經完成了。下面就讓我們看一下APP運行效果吧:

Android運行效果圖:

獲取網上的XML Android端運行效果圖

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved