多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的XML

Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的XML

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-09-30 00:36:50 閱讀次數(shù):2670次

Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的XML


請(qǐng)尊重他人的勞動(dòng)成果,轉(zhuǎn)載請(qǐng)注明出處:Android網(wǎng)絡(luò)編程之獲取網(wǎng)絡(luò)上的XML 

為要獲取網(wǎng)絡(luò)上的XML所以需要服務(wù)器端提供的支持。

一、創(chuàng)建服務(wù)器端:

服務(wù)器端項(xiàng)目結(jié)構(gòu):

服務(wù)器端項(xiàng)目結(jié)構(gòu)

服務(wù)器端運(yùn)行效果圖:

獲取網(wǎng)上的XML服務(wù)器端運(yùn)行效果圖

第一步:創(chuàng)建業(yè)務(wù)所需的JavaBean

 

package com.jph.server.model; import java.util.Date; /** * 新聞實(shí)體類(lèi) * @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; } }

第二步:創(chuàng)建業(yè)務(wù)邏輯接口和具體實(shí)現(xiàn)類(lèi)

業(yè)務(wù)接口:

 

package com.jph.server.service; import java.util.List; import com.jph.server.model.News; public interface XMLService { /** * 獲取最新的資訊 * @return */ public List<News> getLastNews(); }

業(yè)務(wù)接口的實(shí)現(xiàn)類(lèi):

 

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<News> getLastNews(){ List<News> newes = new ArrayList<News>(); 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; } }

第三步:創(chuàng)建控制器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; /** * 負(fù)責(zé)響應(yīng)客戶端的請(qǐng)求: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<News> newes = newsService.getLastNews();//獲取最新的視頻資訊 request.setAttribute("newes", newes); //將客戶端的請(qǐng)求轉(zhuǎn)向news.jsp頁(yè)面 request.getRequestDispatcher("/WEB-INF/page/news.jsp").forward(request, response); } }

 

第四步:使用jstl標(biāo)簽生成XML文件

因此需要使用jstl標(biāo)簽所以需要將jstl.jar與standard.jar兩個(gè)jar包導(dǎo)入項(xiàng)目中。

使用jstl標(biāo)簽在jsp頁(yè)面生成XML:

news.jsp頁(yè)面:

 

<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><?xml version="1.0" encoding="UTF-8"?> <newslist> <c:forEach items="${newes}" var="news"> <news id="${news.id}"> <title>${news.title}</title> <publishDate>${news.publishDate}</publishDate> </news> </c:forEach> </newslist>

至此服務(wù)器端項(xiàng)目已經(jīng)完成。下面開(kāi)始創(chuàng)建Android端項(xiàng)目。

二、創(chuàng)建Android端:

Android端項(xiàng)目結(jié)構(gòu):

Android端項(xiàng)目結(jié)構(gòu)

第一步:創(chuàng)建業(yè)務(wù)所需的JavaBean

提示:因?yàn)榉?wù)器端和Android端項(xiàng)目都是用Java語(yǔ)言實(shí)現(xiàn)的,所以一些組件可以共用,JavaBean便是其中之一。此時(shí)我們?cè)诖罱?/span>Android端項(xiàng)目的時(shí)候,完全可以將服務(wù)器端項(xiàng)目中JavaBean拿來(lái)用。

第二步:創(chuàng)建Android端項(xiàng)目的業(yè)務(wù)邏輯層

核心代碼: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; /** * 獲取網(wǎng)絡(luò)上的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; } /** * 獲取網(wǎng)絡(luò)上的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);//設(shè)置連接超時(shí) conn.setRequestMethod("GET"); if (conn.getResponseCode()==200) { InputStream inputStream=conn.getInputStream(); List<News> listNews=pullXml(inputStream); if (listNews.size()>0) {//如果解析結(jié)果不為空則將解析出的數(shù)據(jù)發(fā)送給UI線程 Message msg=new Message(); msg.obj=listNews; msg.what=PARSESUCCWSS; handler.sendMessage(msg); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }//和服務(wù)器建立連接 } }).start(); } /** * 解析Xml,并將其封裝成 * @param inputStream */ protected List<News> pullXml(InputStream inputStream) { List<News>listNews=new ArrayList<News>(); 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的開(kāi)始節(jié)點(diǎn) 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的結(jié)束節(jié)點(diǎn) listNews.add(news); } break; } eventCode=pullParser.next();//解析下一個(gè)節(jié)點(diǎn)(開(kāi)始節(jié)點(diǎn),結(jié)束節(jié)點(diǎn)) } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return listNews; } }

第三步:創(chuàng)建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; /** * 獲取網(wǎng)絡(luò)上的xml * @author jph * Date:2014.09.26 */ public class MainActivity extends Activity { private List<News>listNews; 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<News>) 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<Map<String, Object>>items=new ArrayList<Map<String,Object>>(); for (News news:listNews) { Map<String, Object>item=new HashMap<String, Object>(); 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端項(xiàng)目已經(jīng)完成了。下面就讓我們看一下APP運(yùn)行效果吧:

Android運(yùn)行效果圖:

獲取網(wǎng)上的XML Android端運(yùn)行效果圖

 

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本特黄的免费大片视频 | 国产国产人免费视频成69大陆 | 可以看毛片的网址 | 国产成人91一区二区三区 | 中文字幕一区二区三区免费看 | 黄色网址中文字幕 | 亚洲欧美国产一区二区三区 | 欧美一级毛片无遮无挡 | 久久久久久久国产精品视频 | 九九爱精品视频 | 欧美日韩在线一区二区三区 | 日本护士毛片在线视频 | 色午夜视频 | 亚洲欧美一区二区视频 | 久久久久国产视频 | 日本无卡码免费一区二区三区 | 亚洲第九十七页 | 亚洲精品国产啊女成拍色拍 | 亚洲日韩中文字幕一区 | 日本卡1卡2卡4卡免费 | 91亚洲精品一区二区自 | 国产成人综合精品一区 | 麻豆国产96在线 | 日韩 | 337p日本欧美在线观看 | 网红毛片 | 性感美女视频免费网站午夜 | 国产精品秋霞午夜 | 黑人太大太粗受不了了 | 另类一区二区三区 | 亚洲 欧美综合小说区图片区 | 欧美日韩一区二区在线视频播放 | 精品伊人 | 成人欧美视频在线看免费 | 成人乱码| 亚洲一区二区精品推荐 | 国产午夜精品免费一二区 | 久久亚洲精品成人 | 亚洲成人免费在线观看 | 国产亚洲精品国产福利在线观看 | 成年人视频免费在线观看 | 日本一级毛片免费播放 |