我的Android进阶之旅------>Android获取服务器上格式为JSON和XML两种格式的信息的小程序
来源:互联网 发布:网页美工设计学校 编辑:程序博客网 时间:2024/06/10 03:38
首先写一个应用服务器端的jsp程序,用jsp和servlet简单实现,如下图所示
package cn.roco.domain;public class News {private Integer id;private String title;private Integer timelength;public News() {}public News(Integer id, String title, Integer timelength) {this.id = id;this.title = title;this.timelength = timelength;}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;}}
package cn.roco.service;import java.util.List;import cn.roco.domain.News;public interface VideoNewsService {/** * 获取最新视频资讯 * @return */public List<News> getLastNews();}
package cn.roco.service.impl;import java.util.ArrayList;import java.util.List;import cn.roco.domain.News;import cn.roco.service.VideoNewsService;public class VideoNewsServiceBean implements VideoNewsService{/** * 模拟从服务器中获取数据 返回 */public List<News> getLastNews(){List<News> newses=new ArrayList<News>();for (int i = 1; i < 30; i++) {newses.add(new News(i,"Xili"+i,i+90));}return newses;}}
package cn.roco.servlet;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 cn.roco.domain.News;import cn.roco.service.VideoNewsService;import cn.roco.service.impl.VideoNewsServiceBean;public class ListServlet extends HttpServlet {private VideoNewsService newsService=new VideoNewsServiceBean();protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {List<News> videos=newsService.getLastNews();String format=req.getParameter("format");//返回JSON格式if ("json".equals(format)) {StringBuilder builder=new StringBuilder();builder.append('[');for (News news : videos) {builder.append('{');builder.append("id:").append(news.getId()).append(',');//转义 ""双引号builder.append("title:\"").append(news.getTitle()).append("\",");builder.append("timelength:").append(news.getTimelength());builder.append("},");}builder.deleteCharAt(builder.length()-1);//去掉最后的','builder.append(']');req.setAttribute("json", builder.toString());req.getRequestDispatcher("/WEB-INF/page/jsonvideonews.jsp").forward(req, resp);}else{//返回XML格式req.setAttribute("videos", videos);req.getRequestDispatcher("/WEB-INF/page/videonews.jsp").forward(req, resp);}}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
如果要返回XML文件 就forward到videonews.jsp页面
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><?xml version="1.0" encoding="UTF-8"?><videonews> <c:forEach items="${videos}" var="video"><news id="${video.id}"><title>${video.title}</title><timelength>${video.timelength}</timelength> </news></c:forEach> </videonews>
如果要返回XML文件 就forward到videonews.jsp页面 如果要返回JSON文件 就forward到jsonvideonews.jsp页面
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ListServlet</servlet-name> <servlet-class>cn.roco.servlet.ListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ListServlet</servlet-name> <url-pattern>/ListServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
服务器端写好之后,就开始写Android应用
架构如下图所示:
package cn.roco.news.domain;public class News {private Integer id;private String title;private Integer timelength;public News() {}public News(Integer id, String title, Integer timelength) {this.id = id;this.title = title;this.timelength = timelength;}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;}}
package cn.roco.utils;import java.io.ByteArrayOutputStream;import java.io.InputStream;public class StremTools {/** * 读取输入流中的数据 * @param inputStream 输入流 * @return 二进制的流数据 * @throws Exception */public static byte[] read(InputStream inputStream) throws Exception {ByteArrayOutputStream outputStream=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int length=0;while((length=inputStream.read(buffer))!=-1){outputStream.write(buffer,0,length);}inputStream.close();return outputStream.toByteArray();}}
package cn.roco.news.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.roco.news.domain.News;import cn.roco.utils.StremTools;public class VideoNewsService {/** * 获取最新的视频资讯 * 采用JSON格式 * @param path * @return * @throws Exception */public static List<News> getJSONLastNews(String path) throws Exception {URL url = new URL(path);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 基于HTTP协议连接对象connection.setConnectTimeout(5000);connection.setRequestMethod("GET");if (connection.getResponseCode() == 200) {InputStream inputStream = connection.getInputStream();return parseJSON(inputStream);}else{throw new RuntimeException("服务器响应失败");}}/** * 解析服务器返回的JSON数据 * * @param inputStream * @return * @throws Exception */private static List<News> parseJSON(InputStream inputStream) throws Exception {List<News> newses=new ArrayList<News>();byte[] data=StremTools.read(inputStream);String jsonData=new String(data,"UTF-8");JSONArray array=new JSONArray(jsonData); for (int i = 0; i < array.length(); i++) { JSONObject jsonObject= array.getJSONObject(i); News news=new News( jsonObject.getInt("id"), jsonObject.getString("title"),jsonObject.getInt("timelength")); newses.add(news);}return newses;}/** * 获取最新的视频资讯 * 采用XML格式 * @param path * @return * @throws Exception */public static List<News> getLastNews(String path) throws Exception {URL url = new URL(path);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 基于HTTP协议连接对象connection.setConnectTimeout(5000);connection.setRequestMethod("GET");if (connection.getResponseCode() == 200) {InputStream inputStream = connection.getInputStream();return parseXML(inputStream);}return null;}/** * 解析服务器返回的XML数据 * * @param inputStream * @return */private static List<News> parseXML(InputStream inputStream) throws Exception {List<News> newses = new ArrayList<News>();News news = null;XmlPullParser parser = Xml.newPullParser();parser.setInput(inputStream, "UTF-8");int event = parser.getEventType();while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_TAG:if ("news".equals(parser.getName())) {int id = new Integer(parser.getAttributeValue(0));news = new News();news.setId(id);} else if ("title".equals(parser.getName())) {news.setTitle(parser.nextText());} else if ("timelength".equals(parser.getName())) {news.setTimelength(new Integer(parser.nextText()));}break;case XmlPullParser.END_TAG:if ("news".equals(parser.getName())) {newses.add(news);news = null;}break;}event = parser.next();}return newses;}}
package cn.roco.news;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import cn.roco.news.domain.News;import cn.roco.news.service.VideoNewsService;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ListView listView = (ListView) findViewById(R.id.listView);try {//采用XML格式//String xmlPath="http://192.168.15.58:8080/Hello/ListServlet";//List<News> videos = VideoNewsService.getLastNews();//采用JSON格式String jsonPath="http://192.168.15.58:8080/Hello/ListServlet?format=json";List<News> videos = VideoNewsService.getJSONLastNews(jsonPath);List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();for (News news : videos) {HashMap<String, Object> item = new HashMap<String, Object>();item.put("id", news.getId());item.put("title", news.getTitle());item.put("timelength",getResources().getString(R.string.timelength)+ news.getTimelength()+ getResources().getString(R.string.min));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 (Exception e) {Toast.makeText(getApplicationContext(), "有错", 1);e.printStackTrace();}}}
item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/title" android:layout_width="200dp"android:layout_height="wrap_content"/><TextView android:id="@+id/timelength" android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayout android:orientation="horizontal"android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:text="@string/title" android:layout_width="200dp"android:layout_height="wrap_content" /><TextView android:text="@string/details" android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><ListView android:layout_width="fill_parent"android:layout_height="wrap_content" android:id="@+id/listView" /></LinearLayout>
string.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">视频资讯</string> <string name="timelength">时长:</string> <string name="min">分钟</string> <string name="title">标题</string> <string name="details">详情</string></resources>
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.roco.news" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <!-- 访问Internet权限 --><uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
运行效果如图所示:
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
- 我的Android进阶之旅------>Android获取服务器上格式为JSON和XML两种格式的信息的小程序
- 我的Android进阶之旅------>Android获取服务器上格式为JSON和XML两种格式的信息的小程序
- 我的Android进阶之旅------>android如何将List<NameValuePair>请求参数列表转换为json格式
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回
- JSON和XML:两种常见的web信息传送格式,数据交换语言
- Android 开发实践 解析XML和JSON格式的数据
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- XML和JSON两种数据交换格式的比较
- wince6.0 编译系统的时候突然出现fatal error C1902: Program database manager mismatch; please check your installa
- 权衡使用云计算解决方案的利与弊
- VC中数据类型转换
- 清明时节的随想
- Arrays.asList()方法使用
- 我的Android进阶之旅------>Android获取服务器上格式为JSON和XML两种格式的信息的小程序
- linux 修改mysql默认字符编码
- 云部署会如何改变企业的风险管理?
- 屏蔽优酷和土豆等视频网站的广告的方法
- sql lite 二个数据库之间的表进行复制
- Oracle中的decode函数和sign函数
- IOS------Warning
- 无题诗一首
- 云部署会损害企业的法规遵从能力吗?