Android網路編程之擷取網路上的XML

來源:互聯網
上載者:User

Android網路編程之擷取網路上的XML

Android網路編程之擷取網路上的XML


請尊重他人的勞動成果,轉載請註明出處:Android網路編程之擷取網路上的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端項目結構:


第一步:建立業務所需的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 stubthis.handler=handler;}/** * 擷取網路上的XML */public void getXml(){new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {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 blocke.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 blocke.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(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case GetXmlAndParse.PARSESUCCWSS:listNews=(List) msg.obj;initData();break;}super.handleMessage(msg);}};@Overrideprotected 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 stubList>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 stubSimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");return sdf.format(publishDate);}}

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

Android運行:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.