一、项目背景
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。
本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。
二、实例代码
Web项目
/**
* 新闻业务类
*
* @author 徐越
*
*/
public class VideoNewsServiceImpl implements VideoNewsService
{
public List<VideoNews> readNews()
{
List<VideoNews> lst = new ArrayList<VideoNews>();
lst.add(new VideoNews(1, "喜洋洋", 20));
lst.add(new VideoNews(2, "变形金刚", 10));
lst.add(new VideoNews(3, "功夫熊猫", 20));
return lst;
}
}
/**
* 新闻Servlet
*
* @author 徐越
*
*/
public class ListServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private VideoNewsService vs = new VideoNewsServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List<VideoNews> news = vs.readNews();
JSONArray jsonarr = JSONArray.fromObject(news);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/plain;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.getWriter().print(jsonarr);
}
}
Android项目
public class VideoNewsServiceImpl implements VideoNewsService
{
/**
* 获取最新视频资讯,从JSON文件中,解析效率高
*
* @return
* @throws Exception
*/
public List<VideoNews> getNewsFromJson() throws Exception
{
List<VideoNews> lst = new ArrayList<VideoNews>();
String path = "http://xxx.xxx.xxx.xxx:8080/web/ListServlet";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
if (200 == conn.getResponseCode())
{
InputStream instream = conn.getInputStream();
lst = parseJSON(instream);
}
return lst;
}
/**
* 解析JSON
*/
private List<VideoNews> parseJSON(InputStream instream) throws Exception
{
List<VideoNews> lst = new ArrayList<VideoNews>();
byte[] data = IOUtils.read(instream);
String jsonStr = new String(data);
JSONArray array = new JSONArray(jsonStr);
for (int i = 0; i < array.length(); i++)
{
JSONObject jsonObj = (JSONObject) array.getJSONObject(i);
VideoNews v = new VideoNews(jsonObj.getInt("id"),
jsonObj.getString("title"), jsonObj.getInt("timeLength"));
lst.add(v);
}
return lst;
}
}
/**
* IO操作工具类
*
* @author 徐越
*
*/
public class IOUtils
{
/**
* 读取输入流为byte[]数组
*/
public static byte[] read(InputStream instream) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = instream.read(buffer)) != -1)
{
bos.write(buffer, 0, len);
}
return bos.toByteArray();
}
}
需要指出的是
在web项目中我采用的是net.sf.json下的类对JSON进行解析,而Android项目中默认自带的JSON包是org.json。API有所不同,只要熟悉一下即可。
分享到:
相关推荐
本资源"安卓Android源码——android访问网络返回json解析和Hanlder的使用.zip"聚焦于两个核心概念:网络请求与数据解析,以及Handler的使用。我们将深入探讨这两个方面。 首先,Android中的网络访问是应用程序与...
本资料包“安卓Android源码——安卓Android学习——数据存储.zip”(实际应为rar文件)包含了关于安卓数据存储的学习资源,旨在帮助开发者深入理解这一核心概念。 1. **Shared Preferences** Shared Preferences是...
在本项目"基于Android的Android项目之——漂亮的平台书架.zip"中,开发者构建了一个具有美观界面和实用功能的电子书架应用。这个项目对于学习Android开发,尤其是想要提升UI设计和应用程序架构技能的毕业生来说,是...
总结来说,“冒险游戏——胜利大逃亡”的开发涵盖了Android平台的多个核心技术,包括Java编程、图形渲染、物理引擎、事件处理、数据存储、网络通信以及用户体验优化等。通过研究这个游戏的源代码,开发者可以深入...
这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...
总的来说,这个项目涵盖了Android应用开发中的多个核心知识点,包括UI设计、数据管理、网络通信等,对于想要学习Android开发或提升UI设计技巧的人来说,是一个非常有价值的参考资料。通过实际操作和研究这个项目,...
这个压缩包“安卓Android源码——(遍历Body).rar”可能包含了关于如何在Android系统中遍历和处理数据结构,特别是Body对象的详细资料。下面将深入探讨Android源码中的Body遍历相关知识。 首先,我们需要了解Body...
在本项目"Android项目之——漂亮的平台书架"中,我们将会探讨如何在Android平台上构建一个美观且功能齐全的电子书架应用。这个项目的核心目标是实现一个用户友好的界面,展示用户收藏的书籍,并提供方便的书籍管理...
"安卓Android源码——开发源码分享之在线音乐播放器完整项目"这一标题揭示了我们要探讨的内容是关于一个基于Android平台的在线音乐播放器的完整开发源码。这通常意味着我们将深入研究如何在Android环境中设计、实现...
在这个项目中,开发者运用了Android开发的相关技术,包括UI设计、数据存储、事件处理、网络通信等,构建了一个完整的应用程序。 一、UI设计 游戏界面通常由多个Activity组成,每个Activity代表一个屏幕或功能模块。...
本资源包"android使用JSON进行网络数据交换(服务端、客户端)的实现.zip"提供了从服务端到客户端使用JSON进行数据交换的实例代码,涵盖了Java和Apache的相关技术。 一、JSON的基本概念与结构 1. JSON是一种文本格式...
这个压缩包文件“安卓Android源码——麦当劳优惠券获取应用.zip”包含了开发一个安卓应用的源代码,该应用的目的是帮助用户获取麦当劳的优惠券。从描述来看,我们可以推测这个应用可能涉及到以下几个关键知识点: 1...
但我们可以根据标题和描述推测,这个项目可能涉及到的知识点包括:Android应用开发、Java编程语言、Android SDK、UI设计、多线程处理、数据存储(SQLite或SharedPreferences)、网络请求(HTTP/HTTPS、JSON解析)、...
在Android开发中,访问网络资源是一项常见的任务,尤其当我们需要从服务器获取数据或者与服务器进行交互时。Webservices是一种常见的服务接口,如SOAP(Simple Object Access Protocol)或REST(Representational ...
本资源"安卓Android源码——安卓Android快速框架+多线程下载框架的技术"提供了深入理解Android平台下的应用程序开发,特别是涉及到Afinal和Gson这两个关键库的使用。下面我们将详细探讨这些知识点。 一、Android...
本文将围绕"Android源码——WordPress for Android.zip"这一主题,深入探讨WordPress for Android的源码实现,揭示其中蕴含的Android开发技术和最佳实践。 首先,Android源码是理解系统工作原理和提升开发技能的...
这个“Android项目之——漂亮的平台书架”压缩包文件很可能包含了一个实现此类功能的示例代码和资源文件。下面我们将深入探讨如何在Android中创建这样一个功能丰富的书架界面,并涉及到的相关技术知识点。 1. **...
本压缩包文件“安卓Android源码——网络通信的六种方式示例代码”提供了关于Android平台下进行网络通信的多种方法的详细示例,这对于开发者来说是非常宝贵的资源。下面将详细介绍这六种网络通信方式及其应用场景。 ...
【安卓Android源码——经典源码之高仿墨迹天气】是一个针对Android平台的开源项目,旨在模仿流行的墨迹天气应用。这个项目为开发者提供了一个深入理解Android应用程序开发,特别是UI设计、网络通信、数据存储以及...
这个项目对于理解Android应用程序的基本架构、数据获取与解析、UI设计以及网络请求等核心概念有着极大的帮助。在此,我们将深入探讨其中涉及的关键知识点。 1. **Android应用程序基础**: - **项目结构**:一个...