`
wsql
  • 浏览: 11887373 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android开发18——获取网络资源之json数据

 
阅读更多

一、项目背景
在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

    本资源"安卓Android源码——android访问网络返回json解析和Hanlder的使用.zip"聚焦于两个核心概念:网络请求与数据解析,以及Handler的使用。我们将深入探讨这两个方面。 首先,Android中的网络访问是应用程序与...

    安卓Android源码——安卓Android学习——数据存储.zip

    本资料包“安卓Android源码——安卓Android学习——数据存储.zip”(实际应为rar文件)包含了关于安卓数据存储的学习资源,旨在帮助开发者深入理解这一核心概念。 1. **Shared Preferences** Shared Preferences是...

    基于Android的Android项目之——漂亮的平台书架.zip

    在本项目"基于Android的Android项目之——漂亮的平台书架.zip"中,开发者构建了一个具有美观界面和实用功能的电子书架应用。这个项目对于学习Android开发,尤其是想要提升UI设计和应用程序架构技能的毕业生来说,是...

    android冒险游戏——胜利大逃亡开发实例

    总结来说,“冒险游戏——胜利大逃亡”的开发涵盖了Android平台的多个核心技术,包括Java编程、图形渲染、物理引擎、事件处理、数据存储、网络通信以及用户体验优化等。通过研究这个游戏的源代码,开发者可以深入...

    Android开发与应用——张荣,原书配套课件

    这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...

    Android项目之——漂亮的平台书架.rar

    总的来说,这个项目涵盖了Android应用开发中的多个核心知识点,包括UI设计、数据管理、网络通信等,对于想要学习Android开发或提升UI设计技巧的人来说,是一个非常有价值的参考资料。通过实际操作和研究这个项目,...

    安卓Android源码——(遍历Body).rar

    这个压缩包“安卓Android源码——(遍历Body).rar”可能包含了关于如何在Android系统中遍历和处理数据结构,特别是Body对象的详细资料。下面将深入探讨Android源码中的Body遍历相关知识。 首先,我们需要了解Body...

    Android项目之——漂亮的平台书架.zip

    在本项目"Android项目之——漂亮的平台书架"中,我们将会探讨如何在Android平台上构建一个美观且功能齐全的电子书架应用。这个项目的核心目标是实现一个用户友好的界面,展示用户收藏的书籍,并提供方便的书籍管理...

    安卓Android源码——开发源码分享之在线音乐播放器完整项目.zip

    "安卓Android源码——开发源码分享之在线音乐播放器完整项目"这一标题揭示了我们要探讨的内容是关于一个基于Android平台的在线音乐播放器的完整开发源码。这通常意味着我们将深入研究如何在Android环境中设计、实现...

    Android毕业设计——成语游戏.zip

    在这个项目中,开发者运用了Android开发的相关技术,包括UI设计、数据存储、事件处理、网络通信等,构建了一个完整的应用程序。 一、UI设计 游戏界面通常由多个Activity组成,每个Activity代表一个屏幕或功能模块。...

    android使用JSON进行网络数据交换(服务端、客户端)的实现.zip源码资源下载

    本资源包"android使用JSON进行网络数据交换(服务端、客户端)的实现.zip"提供了从服务端到客户端使用JSON进行数据交换的实例代码,涵盖了Java和Apache的相关技术。 一、JSON的基本概念与结构 1. JSON是一种文本格式...

    安卓Android源码——麦当劳优惠券获取应用.zip

    这个压缩包文件“安卓Android源码——麦当劳优惠券获取应用.zip”包含了开发一个安卓应用的源代码,该应用的目的是帮助用户获取麦当劳的优惠券。从描述来看,我们可以推测这个应用可能涉及到以下几个关键知识点: 1...

    Android手机安全卫士源码Android项目实战——手机安全卫士开发案例解析.zip

    但我们可以根据标题和描述推测,这个项目可能涉及到的知识点包括:Android应用开发、Java编程语言、Android SDK、UI设计、多线程处理、数据存储(SQLite或SharedPreferences)、网络请求(HTTP/HTTPS、JSON解析)、...

    Android通过Webservices访问网络资源

    在Android开发中,访问网络资源是一项常见的任务,尤其当我们需要从服务器获取数据或者与服务器进行交互时。Webservices是一种常见的服务接口,如SOAP(Simple Object Access Protocol)或REST(Representational ...

    安卓Android源码——安卓Android快速框架+多线程下载框架的技术.rar

    本资源"安卓Android源码——安卓Android快速框架+多线程下载框架的技术"提供了深入理解Android平台下的应用程序开发,特别是涉及到Afinal和Gson这两个关键库的使用。下面我们将详细探讨这些知识点。 一、Android...

    Android源码——WordPress for Android.zip

    本文将围绕"Android源码——WordPress for Android.zip"这一主题,深入探讨WordPress for Android的源码实现,揭示其中蕴含的Android开发技术和最佳实践。 首先,Android源码是理解系统工作原理和提升开发技能的...

    Android项目之——漂亮的平台书架.7z

    这个“Android项目之——漂亮的平台书架”压缩包文件很可能包含了一个实现此类功能的示例代码和资源文件。下面我们将深入探讨如何在Android中创建这样一个功能丰富的书架界面,并涉及到的相关技术知识点。 1. **...

    安卓Android源码——网络通信的六种方式示例代码.zip

    本压缩包文件“安卓Android源码——网络通信的六种方式示例代码”提供了关于Android平台下进行网络通信的多种方法的详细示例,这对于开发者来说是非常宝贵的资源。下面将详细介绍这六种网络通信方式及其应用场景。 ...

    安卓Android源码——精典源码之高仿墨迹天气.zip

    【安卓Android源码——经典源码之高仿墨迹天气】是一个针对Android平台的开源项目,旨在模仿流行的墨迹天气应用。这个项目为开发者提供了一个深入理解Android应用程序开发,特别是UI设计、网络通信、数据存储以及...

    安卓Android源码——天气预报.zip

    这个项目对于理解Android应用程序的基本架构、数据获取与解析、UI设计以及网络请求等核心概念有着极大的帮助。在此,我们将深入探讨其中涉及的关键知识点。 1. **Android应用程序基础**: - **项目结构**:一个...

Global site tag (gtag.js) - Google Analytics